1. 程式人生 > >python學習(六)---文件操作

python學習(六)---文件操作

not game seek read 終端設備 fas uic med ear


文件操作
文件操作流程
1、打開文件,得到文件句柄並賦值給一個變量
2、通過句柄對文件進行操作
3、關閉文件

現有文件如下:
  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
    當我年少輕狂
基本操作:

f = open(‘lyrics‘, encoding=‘utf-8‘) # 打開文件,python3.x中必須要指定encoding參數
first_line = f.readline()
print(‘first line:‘, first_line) # 讀一行
print(‘我是分隔線‘.center(50, ‘-‘))
data = f.read() # 讀取剩下的所以內容,文件大時不要用
print(data) # 打印文件
f.close()

打開文件的模式有:

r,只讀模式(默認)。
w,只寫模式。【不可讀;不存在則創建;存在則刪除內容;】
a,追加模式。【可讀; 不存在則創建;存在則只追加內容;】
"+" 表示可以同時讀寫某個文件

r+,可讀寫文件。【可讀;可寫;可追加】
w+,寫讀
a+,同a
"U"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)

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

rb
wb
ab

data = open("yesterday",encoding=‘utf-8‘) # 這種模式後續是無法再對文件進行操作
f = open("yesterday",encoding=‘utf-8‘) # 文件句柄。這樣就可以對文件進行更多的操作.讀寫操作未設置!
f = open("yesterday2",‘a‘,encoding=‘utf-8‘) # r是讀取文件,w是創建文件,a追加模式;

data = f.read() # 讀取文件
data2 = f.read() # 再次讀取同一文件

print(data)
print(‘-------data2------‘,data2) # 文件讀取的指針已經移動到了文件的最後,所以data2是空的。

f.write("\n我愛北京天安門,\n")
f.write("天安門上太陽升。")


f = open("yesterday",‘r‘,encoding=‘utf-8‘)
for i in range(5):
data = f.readline()
print(data)
print(f.readlines())
for index,line in enumerate(f.readlines()): # f.readlines()是一個列表,enumerate將列表變成一個由(下標,元素)的元組組成的新列表
if index == 9:
print("-----------我是分割線-------")
continue
print(line.strip())

for line in f.readlines()[:9]: # f.readlines()是一個列表
print(line.strip())

循環一:
for index,line in enumerate(f.readlines()): # f.readlines()是一個列表,enumerate將列表變成一個由(下標,元素)的元組組成的新列表
if index == 9:
print("-----------我是分割線-------")
continue
print(line.strip())

循環二:(推薦方式)
f = open("yesterday",‘r‘,encoding=‘utf-8‘)
count = 0
for line in f: # 此時f不再是一個列表,而是一個叠代器。優點是內存占用少。
if count == 9:
print(‘--------分割線--------‘)
count += 1
continue
print(line)
count +=1

文件操作:
f = open("yesterday","r",encoding=‘utf-8‘)
print(f.tell()) # f.tell()查找指針的位置
print(f.readline()) # f.read(n)讀n個字符
print(f.tell())
f.seek(0) # f.seek(n) 將指針回到n的位置
print(f.encoding) # f.encoding打印文件編碼
print(f.fileno()) # 返回文件在內存中的編號
print(f.name) # 打印文件名字
print(f.isatty()) # 判斷是否打開一個終端設備
print(f.seekable()) # 判斷文件是否可移動指針。albe後綴是判斷可用
print(f.flush()) # f.flush強制刷新,將緩存中的數據刷到硬盤中

f = open("yesterday", "a", encoding="utf-8")
f.truncate(20) # 截斷函數,從文件開頭開始截斷但指定位置

f = open("yesterday2", ‘r+‘, encoding=‘utf-8‘) # 文件句柄,讀寫。寫是追加到文件的末尾。
f = open("yesterday2", ‘a+‘, encoding=‘utf-8‘) # 文件句柄,追加讀。寫是追加到文件的末尾。
f = open("yesterday2", ‘w+‘, encoding="utf-8") # 文件句柄,寫讀(不常用)。先創建文件再讀取文件,文件還是不能修改,只能追加。

print(f.readline())
print(f.readline())
print(f.readline())
print(f.tell())
f.write("--------diao----------\n")
f.write("--------diao----------\n")
f.write("--------diao----------\n")
f.write("--------diao----------\n")
f.write("--------diao----------\n")
print(f.tell())
f.seek(10)
print(f.tell())
print(f.readline())
f.write("should be at the begining of the second line")
f.close()
f = open("yesterday2", ‘rb‘) # 文件句柄,讀二進制文件。python3.x網絡傳輸只能用二進制,python2.x還能用字符。
f = open("yesterday2", ‘wb‘) # 文件句柄,讀二進制文件。python3.x網絡傳輸只能用二進制,python2.x還能用字符。
# U 自動轉換成liunx文件格式,表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)。rU,r+U
f.write("hello binary\n".encode())
f.close()

修改文件1

f = open("yesterday2", ‘r‘, encoding="utf-8")
f_new = open("yesterday3", ‘w‘, encoding="utf-8")

for line in f:
if "肆意的快樂等我" in line:
line = line.replace("肆意的快樂等我", "肆意的快樂等phoenix")
f_new.write(line)
f.close()
f_new.close()

with語句:
為了避免打開文件後忘記關閉,可以通過管理上下文,即:
1、with open(‘log‘, ‘r‘) as f:
如此方式,當with代碼塊執行完畢時,內部會自動關閉釋放文件資源。
在python2.7後,with支持同時對多個文件的上下文進行管理,即:
2、with open(‘log1‘) as obj,open(‘log2‘) as obj2:
修改文件2
with open("yesterday2", ‘r‘, encoding="utf-8") as f,\
open("yesterday3", ‘w‘, encoding="utf-8") as f_new:
for line in f:
if "肆意的快樂等我" in line:
line = line.replace("肆意的快樂等我", "肆意的快樂等phoenix")
f_new.write(line)
以上為修改文件的一種方式。

python學習(六)---文件操作