Python基礎——文件處理

1、文件操做python

      打開文件時,須要指定文件路徑和以何等方式打開文件,打開後,便可獲取該文件句柄,往後經過此文件句柄對該文件操做。linux

打開文件的模式有:windows

  • r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
  • w,只寫模式【不可讀;不存在則建立;存在則清空內容】
  • x, 只寫模式【不可讀;不存在則建立,存在則報錯】
  • a, 追加模式【可讀;   不存在則建立;存在則只追加內容】

"+" 表示能夠同時讀寫某個文件python3.x

  • r+, 讀寫【可讀,可寫】
  • w+,寫讀【可讀,可寫】
  • x+ ,寫讀【可讀,可寫】
  • a+, 寫讀【可讀,可寫】

 "b"表示以字節的方式操做緩存

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

 注:以b方式打開時,讀取到的內容是字節類型,寫入時也須要提供字節類型,不能指定編碼網絡

Table 文件對象方法app

方法 描述
f.close() 關閉文件,記住用open()打開文件後必定要記得關閉它,不然會佔用系統的可打開文件句柄數。
f.fileno() 得到文件描述符,是一個數字
f.flush() 刷新輸出緩存
f.isatty() 若是文件是一個交互終端,則返回True,不然返回False。
f.read([count]) 讀出文件,若是有count,則讀出count個字節。
f.readline() 讀出一行信息。
f.readlines() 讀出全部行,也就是讀出整個文件的信息。
f.seek(offset[,where]) 把文件指針移動到相對於where的offset位置。where爲0表示文件開始處,這是默認值 ;1表示當前位置;2表示文件結尾。
f.tell() 得到文件指針位置。
f.truncate([size]) 截取文件,使文件的大小爲size。
f.write(string) 把string字符串寫入文件。
f.writelines(list) 把list中的字符串一行一行地寫入文件,是連續寫入文件,沒有換行。

 



 read(3)表明讀取3個字符,其他的文件內光標移動是以字節爲單位,如:seek,tell,read,truncatessh

f.flush()      #將文件內容從內存刷到硬盤(python3.x)ide

f.closed       #文件若是關閉則返回Trueui

f.encoding   #查看使用open打開文件的編碼

f.tell()         #查看文件處理當前的光標位置

f.seek(3)     #從開頭開始算,將光標移動到第三個字節

f.truncate(10) #從開頭開始算,將文件只保留從0-10個字節的內容,文件必須以寫方式打開,可是w和w+除外。

 


對文件操做的流程

  1. 打開文件,獲得文件句柄並賦值給一個變量
  2. 經過句柄對文件進行操做
  3. 關閉文件
Somehow, it seems the love I knew was always the most destructive kind
不知爲什麼,我經歷的愛情老是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌尖上的雨露
I teased at life as if it were a foolish game
我戲弄生命 視其爲愚蠢的遊戲
The way the evening breeze
就如夜晚的微風
May tease the candle flame
逗弄蠟燭的火苗
The thousand dreams I dreamed
我曾千萬次夢見
The splendid things I planned
那些我計劃的絢麗藍圖
I always built to last on weak and shifting sand
但我老是將之建築在易逝的流沙上
I lived by night and shunned the naked light of day
我夜夜笙歌 逃避白晝赤裸的陽光
And only now I see how the time ran away
事到現在我纔看清歲月是如何匆匆流逝
Yesterday when I was young
昨日當我年少輕狂
So many lovely songs were waiting to be sung
有那麼多甜美的曲兒等我歌唱
So many wild pleasures lay in store for me
有那麼多肆意的快樂等我享受
And so much pain my eyes refused to see
還有那麼多痛苦 個人雙眼卻視而不見
I ran so fast that time and youth at last ran out
我飛快地奔走 最終時光與青春消逝殆盡
I never stopped to think what life was all about
我從未停下腳步去思考生命的意義
And every conversation that I can now recall
現在回想起的全部對話
Concerned itself with me and nothing else at all
除了和我相關的 什麼都記不得了
The game of love I played with arrogance and pride
我用自負和傲慢玩着愛情的遊戲
And every flame I lit too quickly, quickly died
全部我點燃的火焰都熄滅得太快
The friends I made all somehow seemed to slip away
全部我交的朋友彷佛都不知不覺地離開了
And only now I'm left alone to end the play, yeah
只剩我一我的在臺上來結束這場鬧劇
Oh, yesterday when I was young
噢 昨日當我年少輕狂
So many, many songs were waiting to be sung
有那麼那麼多甜美的曲兒等我歌唱
So many wild pleasures lay in store for me
有那麼多肆意的快樂等我享受
And so much pain my eyes refused to see
還有那麼多痛苦 個人雙眼卻視而不見
There are so many songs in me that won't be sung
我有太多歌曲永遠不會被唱起
I feel the bitter taste of tears upon my tongue
我嚐到了舌尖淚水的苦澀滋味
The time has come for me to pay for yesterday
終於到了付出代價的時間 爲了昨日
When I was young
當我年少輕狂

  基本操做 

f=open('Lry') #打開文件
first_line=f.readline()
print('first line',first_line)
print('我是分割線'.center(50,'-'))
data=f.read() #讀取剩下全部內容,文件大時不要用
print(data)  #打印文件
f.close() #關閉文件

  

打開文件的模式有:

  • r,只讀模式(默認)。
  • w,只寫模式。【不可讀;不存在則建立;存在則刪除內容;】
  • a,追加模式。【可讀;   不存在則建立;存在則只追加內容;】

讀文件示例

法1:

一、先建立一個文件名稱爲:Lry 文本文件

2.  讀取文件

#讀取文件內容,而且打印
#!/usr/bin/env python 
#  -*- coding:utf-8 -*-
#Author: Christian
data=open('Lry',encoding='utf8').read()
print(data) 

法2:

打開的文件內存對像,給他賦一個變量,再去讀取這個變量,找到這個值
(只能讀取一次,data1沒有被讀出)
f = open('Lry',encoding ='utf8')   #打開的文件內存對像,給他賦一個變量,再去讀取這個變量,找到這個值
data=f.read()
data1=f.read()
print(data)
print('------我是分割線------'.center(70,'-'),data1)

 結果:只能讀出data的數據,不能讀出data1的數據 


 讀取和寫入內容示例(錯誤的操做方法)

這種方法有個特性:要麼只讀,要麼只寫。不能同時讀又寫.同時會清空文件中的內容。特別危險。

r   :讀

w  :寫

f = open("Lry",'w',encoding="utf-8")   #文件句柄
print(f.read())
f.write('看看效果了')

 執行結果:報錯,同時清空了原Lry中的內容

Traceback (most recent call last):
  File "F:/複習/文件處理.py", line 27, in <module>
    print(f.read())
io.UnsupportedOperation: not readable

   

往文件中寫入內容

f = open("yesterday",'w',encoding="utf-8")   #文件句柄
f.write("我愛北京天安門,\n")    # write建立一個新文件,並能夠寫入內容
f.write("天安門前太陽升\n")
print(f)

 同級目錄下建立名爲yesterday的文本。

 

在原文件的基礎上進行追加

a至關於append

f = open("Lry",'a',encoding="utf-8")   #文件句柄
f.write('這個世界會好嗎\n')
f.write('應該會吧')

 注意:用了a追加的方法後,在使用.read()方法就會報錯

f = open("Lry",'a',encoding="utf-8")   #文件句柄
f.write('這個世界會好嗎\n')
f.write('應該會吧')
f.read()

  

Traceback (most recent call last):
  File "F:/複習/文件處理.py", line 34, in <module>
    f.read()
io.UnsupportedOperation: not readable

  因此,只能追加不能再去讀取!

讀取文件的前N行數據
1.
讀取幾行,就用幾回.readline()
f=open('Lry','r',encoding='utf8')
print(f.readline())
print(f.readline())
print(f.readline()) #讀取幾行,就f.readline()幾回

  執行結果

Somehow, it seems the love I knew was always the most destructive kind

不知爲什麼,我經歷的愛情老是最具毀滅性的的那種

Yesterday when I was young

 2.採用for循環方式

f=open('Lry','r',encoding='utf8')
# print(f.readline())
# print(f.readline())
# print(f.readline())   #讀取幾行,就f.readline()幾回

for i in range(5):
    print(f.readline())

 執行結果

Somehow, it seems the love I knew was always the most destructive kind

不知爲什麼,我經歷的愛情老是最具毀滅性的的那種

Yesterday when I was young

昨日當我年少輕狂

The taste of life was sweet

  

打印文件全部內容

1.直接打印.read()

f=open('Lry','r',encoding='utf8')
print(f.read())

  執行結果是和原文件的格式同樣,中間不插入空格

2.使用.readlines() 

f=open('Lry','r',encoding='utf8')
print(f.readlines())

  執行結果

['Somehow, it seems the love I knew was always the most destructive kind\n', '不知爲什麼,我經歷的愛情老是最具毀滅性的的那種\n', 'Yesterday when I was young\n', '昨日當我年少輕狂\n', 'The taste of life was sweet\n', '生命的滋味是甜的\n', 'As rain upon my tongue\n', '就如舌尖上的雨露\n', 'I teased at life as if it were a foolish game\n', '我戲弄生命 視其爲愚蠢的遊戲\n', 'The way the evening breeze\n', '就如夜晚的微風\n', 'May tease the candle flame\n', '逗弄蠟燭的火苗\n', 'The thousand dreams I dreamed\n', '我曾千萬次夢見\n', 'The splendid things I planned\n', '那些我計劃的絢麗藍圖\n', 'I always built to last on weak and shifting sand\n', '但我老是將之建築在易逝的流沙上\n', 'I lived by night and shunned the naked light of day\n', '我夜夜笙歌 逃避白晝赤裸的陽光\n', 'And only now I see how the time ran away\n', '事到現在我纔看清歲月是如何匆匆流逝\n', 'Yesterday when I was young\n', '昨日當我年少輕狂\n', 'So many lovely songs were waiting to be sung\n', '有那麼多甜美的曲兒等我歌唱\n', 'So many wild pleasures lay in store for me\n', '有那麼多肆意的快樂等我享受\n', 'And so much pain my eyes refused to see\n', '還有那麼多痛苦 個人雙眼卻視而不見\n', 'I ran so fast that time and youth at last ran out\n', '我飛快地奔走 最終時光與青春消逝殆盡\n', 'I never stopped to think what life was all about\n', '我從未停下腳步去思考生命的意義\n', 'And every conversation that I can now recall\n', '現在回想起的全部對話\n', 'Concerned itself with me and nothing else at all\n', '除了和我相關的 什麼都記不得了\n', 'The game of love I played with arrogance and pride\n', '我用自負和傲慢玩着愛情的遊戲\n', 'And every flame I lit too quickly, quickly died\n', '全部我點燃的火焰都熄滅得太快\n', 'The friends I made all somehow seemed to slip away\n', '全部我交的朋友彷佛都不知不覺地離開了\n', "And only now I'm left alone to end the play, yeah\n", '只剩我一我的在臺上來結束這場鬧劇\n', 'Oh, yesterday when I was young\n', '噢 昨日當我年少輕狂\n', 'So many, many songs were waiting to be sung\n', '有那麼那麼多甜美的曲兒等我歌唱\n', 'So many wild pleasures lay in store for me\n', '有那麼多肆意的快樂等我享受\n', 'And so much pain my eyes refused to see\n', '還有那麼多痛苦 個人雙眼卻視而不見\n', "There are so many songs in me that won't be sung\n", '我有太多歌曲永遠不會被唱起\n', 'I feel the bitter taste of tears upon my tongue\n', '我嚐到了舌尖淚水的苦澀滋味\n', 'The time has come for me to pay for yesterday\n', '終於到了付出代價的時間 爲了昨日\n', 'When I was young\n', '當我年少輕狂']

  發現結果是一個列表,並且每一句後面有\n轉義字符,那麼咱們能夠想到用for循環將其遍歷

f=open('Lry','r',encoding='utf8')
for i in f.readlines():
    print(i)

  執行結果:

Somehow, it seems the love I knew was always the most destructive kind

不知爲什麼,我經歷的愛情老是最具毀滅性的的那種

Yesterday when I was young

昨日當我年少輕狂

The taste of life was sweet

生命的滋味是甜的

As rain upon my tongue

就如舌尖上的雨露

I teased at life as if it were a foolish game

我戲弄生命 視其爲愚蠢的遊戲

The way the evening breeze

就如夜晚的微風

May tease the candle flame

逗弄蠟燭的火苗

The thousand dreams I dreamed

我曾千萬次夢見

The splendid things I planned

那些我計劃的絢麗藍圖

I always built to last on weak and shifting sand

但我老是將之建築在易逝的流沙上

I lived by night and shunned the naked light of day

我夜夜笙歌 逃避白晝赤裸的陽光

And only now I see how the time ran away

事到現在我纔看清歲月是如何匆匆流逝

Yesterday when I was young

昨日當我年少輕狂

So many lovely songs were waiting to be sung

有那麼多甜美的曲兒等我歌唱

So many wild pleasures lay in store for me

有那麼多肆意的快樂等我享受

And so much pain my eyes refused to see

還有那麼多痛苦 個人雙眼卻視而不見

I ran so fast that time and youth at last ran out

我飛快地奔走 最終時光與青春消逝殆盡

I never stopped to think what life was all about

我從未停下腳步去思考生命的意義

And every conversation that I can now recall

現在回想起的全部對話

Concerned itself with me and nothing else at all

除了和我相關的 什麼都記不得了

The game of love I played with arrogance and pride

我用自負和傲慢玩着愛情的遊戲

And every flame I lit too quickly, quickly died

全部我點燃的火焰都熄滅得太快

The friends I made all somehow seemed to slip away

全部我交的朋友彷佛都不知不覺地離開了

And only now I'm left alone to end the play, yeah

只剩我一我的在臺上來結束這場鬧劇

Oh, yesterday when I was young

噢 昨日當我年少輕狂

So many, many songs were waiting to be sung

有那麼那麼多甜美的曲兒等我歌唱

So many wild pleasures lay in store for me

有那麼多肆意的快樂等我享受

And so much pain my eyes refused to see

還有那麼多痛苦 個人雙眼卻視而不見

There are so many songs in me that won't be sung

我有太多歌曲永遠不會被唱起

I feel the bitter taste of tears upon my tongue

我嚐到了舌尖淚水的苦澀滋味

The time has come for me to pay for yesterday

終於到了付出代價的時間 爲了昨日

When I was young

當我年少輕狂

  發現是不論是打印N行或者是所有打印出來,發現都帶有換行和空格,

  此時咱們能夠用.strip()方法

f=open('Lry','r',encoding='utf8')
for i in f.readlines():
    print(i.strip())

  執行結果:

Somehow, it seems the love I knew was always the most destructive kind
不知爲什麼,我經歷的愛情老是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌尖上的雨露
I teased at life as if it were a foolish game
我戲弄生命 視其爲愚蠢的遊戲
The way the evening breeze
就如夜晚的微風
May tease the candle flame
逗弄蠟燭的火苗
The thousand dreams I dreamed
我曾千萬次夢見
The splendid things I planned
那些我計劃的絢麗藍圖
I always built to last on weak and shifting sand
但我老是將之建築在易逝的流沙上
I lived by night and shunned the naked light of day
我夜夜笙歌 逃避白晝赤裸的陽光
And only now I see how the time ran away
事到現在我纔看清歲月是如何匆匆流逝
Yesterday when I was young
昨日當我年少輕狂
So many lovely songs were waiting to be sung
有那麼多甜美的曲兒等我歌唱
So many wild pleasures lay in store for me
有那麼多肆意的快樂等我享受
And so much pain my eyes refused to see
還有那麼多痛苦 個人雙眼卻視而不見
I ran so fast that time and youth at last ran out
我飛快地奔走 最終時光與青春消逝殆盡
I never stopped to think what life was all about
我從未停下腳步去思考生命的意義
And every conversation that I can now recall
現在回想起的全部對話
Concerned itself with me and nothing else at all
除了和我相關的 什麼都記不得了
The game of love I played with arrogance and pride
我用自負和傲慢玩着愛情的遊戲
And every flame I lit too quickly, quickly died
全部我點燃的火焰都熄滅得太快
The friends I made all somehow seemed to slip away
全部我交的朋友彷佛都不知不覺地離開了
And only now I'm left alone to end the play, yeah
只剩我一我的在臺上來結束這場鬧劇
Oh, yesterday when I was young
噢 昨日當我年少輕狂
So many, many songs were waiting to be sung
有那麼那麼多甜美的曲兒等我歌唱
So many wild pleasures lay in store for me
有那麼多肆意的快樂等我享受
And so much pain my eyes refused to see
還有那麼多痛苦 個人雙眼卻視而不見
There are so many songs in me that won't be sung
我有太多歌曲永遠不會被唱起
I feel the bitter taste of tears upon my tongue
我嚐到了舌尖淚水的苦澀滋味
The time has come for me to pay for yesterday
終於到了付出代價的時間 爲了昨日
When I was young
當我年少輕狂

 

打印第9行,不打印第10行示例

 法1:不推薦使用,效率過低
f=open('Lry','r',encoding='utf8')
for idex,line in enumerate(f.readlines()):
    if idex == 9:
        print('我是分割線'.center(50,'_'))
        continue
    print(line.strip())
 

  執行結果:

Somehow, it seems the love I knew was always the most destructive kind
不知爲什麼,我經歷的愛情老是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌尖上的雨露
I teased at life as if it were a foolish game
______________________我是分割線_______________________
The way the evening breeze
就如夜晚的微風
May tease the candle flame
逗弄蠟燭的火苗
The thousand dreams I dreamed
我曾千萬次夢見
The splendid things I planned
那些我計劃的絢麗藍圖
I always built to last on weak and shifting sand
但我老是將之建築在易逝的流沙上
I lived by night and shunned the naked light of day
我夜夜笙歌 逃避白晝赤裸的陽光
And only now I see how the time ran away
事到現在我纔看清歲月是如何匆匆流逝
Yesterday when I was young
昨日當我年少輕狂
So many lovely songs were waiting to be sung
有那麼多甜美的曲兒等我歌唱
So many wild pleasures lay in store for me
有那麼多肆意的快樂等我享受
And so much pain my eyes refused to see
還有那麼多痛苦 個人雙眼卻視而不見
I ran so fast that time and youth at last ran out
我飛快地奔走 最終時光與青春消逝殆盡
I never stopped to think what life was all about
我從未停下腳步去思考生命的意義
And every conversation that I can now recall
現在回想起的全部對話
Concerned itself with me and nothing else at all
除了和我相關的 什麼都記不得了
The game of love I played with arrogance and pride
我用自負和傲慢玩着愛情的遊戲
And every flame I lit too quickly, quickly died
全部我點燃的火焰都熄滅得太快
The friends I made all somehow seemed to slip away
全部我交的朋友彷佛都不知不覺地離開了
And only now I'm left alone to end the play, yeah
只剩我一我的在臺上來結束這場鬧劇
Oh, yesterday when I was young
噢 昨日當我年少輕狂
So many, many songs were waiting to be sung
有那麼那麼多甜美的曲兒等我歌唱
So many wild pleasures lay in store for me
有那麼多肆意的快樂等我享受
And so much pain my eyes refused to see
還有那麼多痛苦 個人雙眼卻視而不見
There are so many songs in me that won't be sung
我有太多歌曲永遠不會被唱起
I feel the bitter taste of tears upon my tongue
我嚐到了舌尖淚水的苦澀滋味
The time has come for me to pay for yesterday
終於到了付出代價的時間 爲了昨日
When I was young
當我年少輕狂

  

法2:推薦使用,效率高

f=open('Lry','r',encoding='utf8')
count=0
for line in f:
    if count ==9:
        print('我是分割線'.center(50,'_'))
        count+=1
        continue
    print(line.strip())
    count+=1

  執行結果:

Somehow, it seems the love I knew was always the most destructive kind
不知爲什麼,我經歷的愛情老是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌尖上的雨露
I teased at life as if it were a foolish game
______________________我是分割線_______________________
我戲弄生命 視其爲愚蠢的遊戲
The way the evening breeze
就如夜晚的微風
May tease the candle flame
逗弄蠟燭的火苗
The thousand dreams I dreamed
我曾千萬次夢見
The splendid things I planned
那些我計劃的絢麗藍圖
I always built to last on weak and shifting sand
但我老是將之建築在易逝的流沙上
I lived by night and shunned the naked light of day
我夜夜笙歌 逃避白晝赤裸的陽光
And only now I see how the time ran away
事到現在我纔看清歲月是如何匆匆流逝
Yesterday when I was young
昨日當我年少輕狂
So many lovely songs were waiting to be sung
有那麼多甜美的曲兒等我歌唱
So many wild pleasures lay in store for me
有那麼多肆意的快樂等我享受
And so much pain my eyes refused to see
還有那麼多痛苦 個人雙眼卻視而不見
I ran so fast that time and youth at last ran out
我飛快地奔走 最終時光與青春消逝殆盡
I never stopped to think what life was all about
我從未停下腳步去思考生命的意義
And every conversation that I can now recall
現在回想起的全部對話
Concerned itself with me and nothing else at all
除了和我相關的 什麼都記不得了
The game of love I played with arrogance and pride
我用自負和傲慢玩着愛情的遊戲
And every flame I lit too quickly, quickly died
全部我點燃的火焰都熄滅得太快
The friends I made all somehow seemed to slip away
全部我交的朋友彷佛都不知不覺地離開了
And only now I'm left alone to end the play, yeah
只剩我一我的在臺上來結束這場鬧劇
Oh, yesterday when I was young
噢 昨日當我年少輕狂
So many, many songs were waiting to be sung
有那麼那麼多甜美的曲兒等我歌唱
So many wild pleasures lay in store for me
有那麼多肆意的快樂等我享受
And so much pain my eyes refused to see
還有那麼多痛苦 個人雙眼卻視而不見
There are so many songs in me that won't be sung
我有太多歌曲永遠不會被唱起
I feel the bitter taste of tears upon my tongue
我嚐到了舌尖淚水的苦澀滋味
The time has come for me to pay for yesterday
終於到了付出代價的時間 爲了昨日
When I was young
當我年少輕狂

  



 

seek()和tell() 

seek():移動文件讀取指針到指定位置
tell():返回文件讀取指針的位置,即當前位置

print(f.tell())  #0
print(f.readline(5))   #f.readline()是按字符進行讀取的
print(f.tell())  #5
print(f.readline())  #ow, it seems the love I knew was always the most destructive kind
print(f.tell())   #72

#回到第幾個字符,想回第幾個字符,就輸入數字幾
seek(10)
print(f.readline()) #t seems the love I knew was always the most destructive kind
 

  執行結果

0
Someh
5
ow, it seems the love I knew was always the most destructive kind

72
t seems the love I knew was always the most destructive kind

  

encoding 打印文件編碼

fileno() 返回文件句柄,在內存中的編號

name  打印文件名稱

isatty() 打印一個終端設備  (什麼是終端設備呢,例如:打印機)

f=open('Lry','r',encoding='utf8')
print(f.encoding)   #打印文件編碼
print(f.name)    #打印文件名字
print(f.fileno())   #返回文件句柄,在內存中的編號
print(f.isatty())  # #打印一個終端設備(用於打印機交互)

  

執行結果

utf8
Lry
3
False

  

seekable  移動指針位置

備註:tty文件是不能移回去的,不是全部的均可以移回去的,只有字符串、二進制能夠移回去。

f=open('Lry','r',encoding='utf8')
print(f.seekable())  
True

 查看buffer(自己buffer,也是內存中的臨時文件)

f=open('Lry','r',encoding='utf8')
print(dic(f.buffer))

  執行結果

['__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_dealloc_warn', '_finalizing', 'close', 'closed', 'detach', 'fileno', 'flush', 'isatty', 'mode', 'name', 'peek', 'raw', 'read', 'read1', 'readable', 'readinto', 'readinto1', 'readline', 'readlines', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'writelines']

 

flush 刷新 

說明:寫入的內容是存放在電腦的緩存中的,只有flush了一下,纔會保存到硬盤中去。

#剛寫完一行內容,若是斷電,他就沒有寫進去,斷電內存中數據就會丟失。若是沒有斷電,數據還在內存的緩存中,須要刷新一下,才能寫到硬盤中。

#內存有一個大小限制,須要達到這個大小,纔會把內存緩存中的內容寫到硬盤中。

 

 



 

在屏幕上打印進度條

  首先想到用print()打印符號,發現每次打印後默認換行,後面加end=''又發現新問題,符號會同時打印出來,沒有達到預期效果。

  法1:藉助sys.stdout.write()    (不理想)

import sys
a=sys.stdout.write('x')   #標準輸出到屏幕
print(a)

  法2:(完美解決) 

import sys,time
for i in range(50):
    sys.stdout.write('*')
    sys.stdout.flush()
    time.sleep(0.1)

 

  


  

"+" 表示能夠同時讀寫某個文件

  • r+,可讀寫文件。【可讀;可寫;可追加】
  • w+,寫讀
  • a+,同a

"U"表示在讀取時,能夠將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)

  • rU
  • r+U

  r+,可讀寫文件。【可讀;可寫;可追加】 (工做中常常用)
  
 

f=open('Lry','r+',encoding='utf8')
for i in range(5):
    print(f.readline().strip())
print(f.tell())  #打印光標位置
f.write('陳粒的歌聽的不多')

 執行結果

Somehow, it seems the love I knew was always the most destructive kind
不知爲什麼,我經歷的愛情老是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
238

  

 

  w+,寫讀 (工做中基本不用)  

f = open("yesterday2",'w+',encoding="utf-8")  #文件句柄

#建立文件寫4行
f.write("------------------diao------------------1\n")
f.write("------------------diao------------------1\n")
f.write("------------------diao------------------1\n")
f.write("------------------diao------------------1\n")

#打印位置
print(f.tell())

#返回指針到第10行
f.seek(0)

#打印出來
print(f.read())

#寫入下面這句話
f.write("should be at the begining of the second line")

  執行結果

172
------------------diao------------------1
------------------diao------------------1
------------------diao------------------1
------------------diao------------------1

  

   a+,同a,追加讀寫 

f = open("yesterday3",'a+',encoding="utf-8")  #文件句柄  追加讀寫
#建立文件寫4行
f.write("------------------diao------------------1\n")
f.write("------------------diao------------------1\n")
f.write("------------------diao------------------1\n")
f.write("------------------diao------------------1\n")
#打印位置
print(f.tell())
#返回指針到第10行
f.seek(0)
#打印出來
print(f.readline())
#寫入下面這句話
f.write("should be at the begining of the second line")
#關閉
f.close()

  


"b"表示處理二進制文件(如:FTP發送上傳ISO鏡像文件,linux可忽略,windows處理二進制文件時需標註)

  • rb
  • wb
  • ab

 

打開二進制文件(網絡傳輸的時候,就必須以二進制打開)

f = open("yesterday2",'rb')  #文件句柄  二進制文件
print(f.readline())
print(f.readline())
print(f.readline())

  執行結果

b'------------------diao------------------1\r\n'
b'------------------diao------------------1\r\n'
b'------------------diao------------------1\r\n'

  

文件操做的二進制讀寫

f = open("yesterday2",'wb')  #文件句柄  二進制文件
f.write("hello binary\n".encode())
f.close()

  



 

 

   更改文件內容

  1.打開一個原文件,進行讀取

  2.將讀取到的內容寫入一個新的文件,並進行修改

這麼多年你一我的一直在走
方向和天氣的節奏會讓你憂愁
你說你碰見了一大堆奇怪的人 
他們看上去好像都比你開心 [1]
你能不能抽空替我去一個地方
聽說那的人都擅長給別人答案
若是你想知道關於它的其餘事情
我也不會給你劉堃的電話號碼 [1]
多想和你同樣臭不要臉
墨鏡和表情都掛在臉上
穿什麼吃什麼玩什麼均可以
今天愛他明天恨他也能夠 [1]
這麼多年我一我的一直在走
走過了人性的背後和白雲蒼狗
總覺得答案會出如今下一個車站
隨後的事情我不說你也能明白 [1]
悲傷是奢侈品我消受不起
快樂像噩夢總讓人驚醒
你要哭吧就哭吧就隨意吧
反正我早已習慣不去相信 [1]
悲傷是奢侈品我消受不起
快樂像噩夢一轉眼驚醒
你要走吧就走吧就隨意吧
反正我早已決定再也不回去 [1]

  

f=open('dingxi','r',encoding='utf8')
new_f=open('dingxi2','w',encoding='utf8')
for line in f:
    if '多想和你同樣臭不要臉' in line:
        line = line.replace('多想和你同樣臭不要臉','就是這麼的臭不要臉')
    new_f.write(line)
f.close()
new_f.close()

 執行結果:建立一個新的文件,而且替換原來的‘多想和你同樣臭不要臉’

這麼多年你一我的一直在走
方向和天氣的節奏會讓你憂愁
你說你碰見了一大堆奇怪的人 
他們看上去好像都比你開心 [1]
你能不能抽空替我去一個地方
聽說那的人都擅長給別人答案
若是你想知道關於它的其餘事情
我也不會給你劉堃的電話號碼 [1]
就是這麼的臭不要臉
墨鏡和表情都掛在臉上
穿什麼吃什麼玩什麼均可以
今天愛他明天恨他也能夠 [1]
這麼多年我一我的一直在走
走過了人性的背後和白雲蒼狗
總覺得答案會出如今下一個車站
隨後的事情我不說你也能明白 [1]
悲傷是奢侈品我消受不起
快樂像噩夢總讓人驚醒
你要哭吧就哭吧就隨意吧
反正我早已習慣不去相信 [1]
悲傷是奢侈品我消受不起
快樂像噩夢一轉眼驚醒
你要走吧就走吧就隨意吧
反正我早已決定再也不回去 [1]

  

 經過變量傳參的方式,實現修改文件某行內容

  (有待研究sys.argv)

import sys
f=open('dingxi','r',encoding='utf8')
new_f=open('dingxi3','w',encoding='utf8')
for line in f:
    find_str = sys.argv[1]
    replace_str = sys.argv[2]
    if find_str in line:
        line = line.replace(find_str,replace_str)
    new_f.write(line)
f.close()
new_f.close()

  

 



 

with語句

爲了不打開文件後忘記關閉,能夠經過管理上下文,即:

with open('dingxi','r',encoding='utf8') as f:
    ……

  

如此方式,當with代碼塊執行完畢時,內部會自動關閉並釋放文件資源。

在Python 2.7 後,with又支持同時對多個文件的上下文進行管理,即:

with open('log1') as obj1, open('log2') as obj2:
    pass

  

同時打開兩個文件的操做

with open('dingxi','r',encoding='utf8') as f,open('Lry','r',encoding='utf8') as f1:
    print(f.readline())
    print(f1.readline())

  執行結果:

這麼多年你一我的一直在走

Somehow, it seems the love I knew was always the most destructive kind

 


讀取大文件的最後一行內容(例如:查看linux系統文件日誌)

 一、先建立一個日誌文件

2016/12/25 alex 幹了什麼事情
2016/12/26 alex 幹了什麼事情
2016/12/27 alex 幹了什麼事情
2016/12/28 alex 幹了什麼事情
2016/12/29 alex 幹了什麼事情
2016/12/30  sb  幹了什麼sb事情 

 2.

f=open('rizhi','rb')
for i in f:
    offs=-10
    while 1:
        f.seek(offs,2)   #offset -- 開始的偏移量,也就是表明須要移動偏移的字節數
        data=f.readlines()
        if len(data)>1:
            print('文件的最後一行是:%s' % (data[-1].decode('utf-8')))  # 讀取文件最後一行
            break

        offs*=2  #至關於兩倍的內容查找

  執行結果:

文件的最後一行是:2016/12/30  sb  幹了什麼sb事情

  



 

 

 補充:

     1.二進制的方式讀取,不須要加編碼方式  

f=open('dingxi','rb')
print(f.read())

  執行結果

b'\xe8\xbf\x99\xe4\xb9\x88\xe5\xa4\x9a\xe5\xb9\xb4\xe4\xbd\xa0\xe4\xb8\x80\xe4\xb8\xaa\xe4\xba\xba\xe4\xb8\x80\xe7\x9b\xb4\xe5\x9c\xa8\xe8\xb5\xb0\r\n\xe6\x96\xb9\xe5\x90\x91\xe5\x92\x8c\xe5\xa4\xa9\xe6\xb0\x94\xe7\x9a\x84\xe8\x8a\x82\xe5\xa5\x8f\xe4\xbc\x9a\xe8\xae\xa9\xe4\xbd\xa0\xe5\xbf\xa7\xe6\x84\x81\r\n\xe4\xbd\xa0\xe8\xaf\xb4\xe4\xbd\xa0\xe9\x81\x87\xe8\xa7\x81\xe4\xba\x86\xe4\xb8\x80\xe5\xa4\xa7\xe5\xa0\x86\xe5\xa5\x87\xe6\x80\xaa\xe7\x9a\x84\xe4\xba\xba\xe3\x80\x80\r\n\xe4\xbb\x96\xe4\xbb\xac\xe7\x9c\x8b\xe4\xb8\x8a\xe5\x8e\xbb\xe5\xa5\xbd\xe5\x83\x8f\xe9\x83\xbd\xe6\xaf\x94\xe4\xbd\xa0\xe5\xbc\x80\xe5\xbf\x83 [1]\r\n\xe4\xbd\xa0\xe8\x83\xbd\xe4\xb8\x8d\xe8\x83\xbd\xe6\x8a\xbd\xe7\xa9\xba\xe6\x9b\xbf\xe6\x88\x91\xe5\x8e\xbb\xe4\xb8\x80\xe4\xb8\xaa\xe5\x9c\xb0\xe6\x96\xb9\r\n\xe6\x8d\xae\xe8\xaf\xb4\xe9\x82\xa3\xe7\x9a\x84\xe4\xba\xba\xe9\x83\xbd\xe6\x93\x85\xe9\x95\xbf\xe7\xbb\x99\xe5\x88\xab\xe4\xba\xba\xe7\xad\x94\xe6\xa1\x88\r\n\xe5\xa6\x82\xe6\x9e\x9c\xe4\xbd\xa0\xe6\x83\xb3\xe7\x9f\xa5\xe9\x81\x93\xe5\x85\xb3\xe4\xba\x8e\xe5\xae\x83\xe7\x9a\x84\xe5\x85\xb6\xe4\xbb\x96\xe4\xba\x8b\xe6\x83\x85\r\n\xe6\x88\x91\xe4\xb9\x9f\xe4\xb8\x8d\xe4\xbc\x9a\xe7\xbb\x99\xe4\xbd\xa0\xe5\x88\x98\xe5\xa0\x83\xe7\x9a\x84\xe7\x94\xb5\xe8\xaf\x9d\xe5\x8f\xb7\xe7\xa0\x81 [1]\r\n\xe5\xa4\x9a\xe6\x83\xb3\xe5\x92\x8c\xe4\xbd\xa0\xe4\xb8\x80\xe6\xa0\xb7\xe8\x87\xad\xe4\xb8\x8d\xe8\xa6\x81\xe8\x84\xb8\r\n\xe5\xa2\xa8\xe9\x95\x9c\xe5\x92\x8c\xe8\xa1\xa8\xe6\x83\x85\xe9\x83\xbd\xe6\x8c\x82\xe5\x9c\xa8\xe8\x84\xb8\xe4\xb8\x8a\r\n\xe7\xa9\xbf\xe4\xbb\x80\xe4\xb9\x88\xe5\x90\x83\xe4\xbb\x80\xe4\xb9\x88\xe7\x8e\xa9\xe4\xbb\x80\xe4\xb9\x88\xe9\x83\xbd\xe5\x8f\xaf\xe4\xbb\xa5\r\n\xe4\xbb\x8a\xe5\xa4\xa9\xe7\x88\xb1\xe4\xbb\x96\xe6\x98\x8e\xe5\xa4\xa9\xe6\x81\xa8\xe4\xbb\x96\xe4\xb9\x9f\xe5\x8f\xaf\xe4\xbb\xa5 [1]\r\n\xe8\xbf\x99\xe4\xb9\x88\xe5\xa4\x9a\xe5\xb9\xb4\xe6\x88\x91\xe4\xb8\x80\xe4\xb8\xaa\xe4\xba\xba\xe4\xb8\x80\xe7\x9b\xb4\xe5\x9c\xa8\xe8\xb5\xb0\r\n\xe8\xb5\xb0\xe8\xbf\x87\xe4\xba\x86\xe4\xba\xba\xe6\x80\xa7\xe7\x9a\x84\xe8\x83\x8c\xe5\x90\x8e\xe5\x92\x8c\xe7\x99\xbd\xe4\xba\x91\xe8\x8b\x8d\xe7\x8b\x97\r\n\xe6\x80\xbb\xe4\xbb\xa5\xe4\xb8\xba\xe7\xad\x94\xe6\xa1\x88\xe4\xbc\x9a\xe5\x87\xba\xe7\x8e\xb0\xe5\x9c\xa8\xe4\xb8\x8b\xe4\xb8\x80\xe4\xb8\xaa\xe8\xbd\xa6\xe7\xab\x99\r\n\xe9\x9a\x8f\xe5\x90\x8e\xe7\x9a\x84\xe4\xba\x8b\xe6\x83\x85\xe6\x88\x91\xe4\xb8\x8d\xe8\xaf\xb4\xe4\xbd\xa0\xe4\xb9\x9f\xe8\x83\xbd\xe6\x98\x8e\xe7\x99\xbd [1]\r\n\xe6\x82\xb2\xe4\xbc\xa4\xe6\x98\xaf\xe5\xa5\xa2\xe4\xbe\x88\xe5\x93\x81\xe6\x88\x91\xe6\xb6\x88\xe5\x8f\x97\xe4\xb8\x8d\xe8\xb5\xb7\r\n\xe5\xbf\xab\xe4\xb9\x90\xe5\x83\x8f\xe5\x99\xa9\xe6\xa2\xa6\xe6\x80\xbb\xe8\xae\xa9\xe4\xba\xba\xe6\x83\x8a\xe9\x86\x92\r\n\xe4\xbd\xa0\xe8\xa6\x81\xe5\x93\xad\xe5\x90\xa7\xe5\xb0\xb1\xe5\x93\xad\xe5\x90\xa7\xe5\xb0\xb1\xe9\x9a\x8f\xe6\x84\x8f\xe5\x90\xa7\r\n\xe5\x8f\x8d\xe6\xad\xa3\xe6\x88\x91\xe6\x97\xa9\xe5\xb7\xb2\xe4\xb9\xa0\xe6\x83\xaf\xe4\xb8\x8d\xe5\x8e\xbb\xe7\x9b\xb8\xe4\xbf\xa1 [1]\r\n\xe6\x82\xb2\xe4\xbc\xa4\xe6\x98\xaf\xe5\xa5\xa2\xe4\xbe\x88\xe5\x93\x81\xe6\x88\x91\xe6\xb6\x88\xe5\x8f\x97\xe4\xb8\x8d\xe8\xb5\xb7\r\n\xe5\xbf\xab\xe4\xb9\x90\xe5\x83\x8f\xe5\x99\xa9\xe6\xa2\xa6\xe4\xb8\x80\xe8\xbd\xac\xe7\x9c\xbc\xe6\x83\x8a\xe9\x86\x92\r\n\xe4\xbd\xa0\xe8\xa6\x81\xe8\xb5\xb0\xe5\x90\xa7\xe5\xb0\xb1\xe8\xb5\xb0\xe5\x90\xa7\xe5\xb0\xb1\xe9\x9a\x8f\xe6\x84\x8f\xe5\x90\xa7\r\n\xe5\x8f\x8d\xe6\xad\xa3\xe6\x88\x91\xe6\x97\xa9\xe5\xb7\xb2\xe5\x86\xb3\xe5\xae\x9a\xe4\xb8\x8d\xe5\x86\x8d\xe5\x9b\x9e\xe5\x8e\xbb [1]'

 decode編碼出結果

f=open('dingxi','rb')
data=f.read()
data=data.decode('utf8')
print(data)

 執行結果

這麼多年你一我的一直在走
方向和天氣的節奏會讓你憂愁
你說你碰見了一大堆奇怪的人 
他們看上去好像都比你開心 [1]
你能不能抽空替我去一個地方
聽說那的人都擅長給別人答案
若是你想知道關於它的其餘事情
我也不會給你劉堃的電話號碼 [1]
多想和你同樣臭不要臉
墨鏡和表情都掛在臉上
穿什麼吃什麼玩什麼均可以
今天愛他明天恨他也能夠 [1]
這麼多年我一我的一直在走
走過了人性的背後和白雲蒼狗
總覺得答案會出如今下一個車站
隨後的事情我不說你也能明白 [1]
悲傷是奢侈品我消受不起
快樂像噩夢總讓人驚醒
你要哭吧就哭吧就隨意吧
反正我早已習慣不去相信 [1]
悲傷是奢侈品我消受不起
快樂像噩夢一轉眼驚醒
你要走吧就走吧就隨意吧
反正我早已決定再也不回去 [1]

  把a.txt文件中,含有a的內容替換成0

  a.txt文件內容 

abc
adafhjkklhfg
adaaaagafklakh;fkl

  

import os
fr=open('a','r',encoding='utf8')
fw=open('b','w',encoding='utf8')
for i in fr:
    if 'a' in i:
        y=i.replace('a','0')
    fw.write(y)

fr.close()
fw.close()

os.rename('a','a.bak')  #先將a備份
os.rename('b','a')  #再將b重命名爲a
os.remove('a.bak')#最後將a.bak移除

  執行結果

0bc
0d0fhjkklhfg
0d0000g0fkl0kh;fkl

  

 將字符串轉換爲二進制數

 1.

b = '12345gdfafdsa'.encode()
print(b)

  執行結果

b'12345gdfafdsa'

  2.

 
aa = 'fsdfdsfssdsfds'
print(bytes(aa,encoding='gbk'))
 

  執行結果

b'fsdfdsfssdsfds'

  

r+ 先讀再寫 

實現先讀出列表,再寫把a替換成6

1 abc
2 adfd555f5f
3 adfd55fdf

  

with open('a',"r+",encoding='utf8') as f:
    a=f.readlines()
    print(a)
    f.seek(0)
    for i in f:
        if 'a' in i:
            y=i.replace('a','6')
            f.write(y)
相關文章
相關標籤/搜索