1.打開文件: f=open(r'E:\PythonProjects\test7\a.txt',mode='rt',encoding='utf-8') 以上三個單引號內分別表示:要打開的文件的路徑,mode為文件打開方式具體介紹在下文,encoding為文件的字元編碼,一般預設為utf-8 2.讀寫 ...
1.打開文件:
f=open(r'E:\PythonProjects\test7\a.txt',mode='rt',encoding='utf-8')
以上三個單引號內分別表示:要打開的文件的路徑,mode為文件打開方式具體介紹在下文,encoding為文件的字元編碼,一般預設為utf-8
2.讀寫文件:
data=f.read() # 讀文件
f.write() # 寫文件
3.關閉文件:
f.close()
4.為了簡便,一般採用上下文的方法進行文件操作,可不用關閉文件
1 with open('a.txt',mode='rt',encoding='utf-8') as f: 2 data=f.read() 3 print(data)讀文件
with open('a.txt',mode='wt',encoding='utf-8') as f: f.write('hello world')寫文件
5.控制文件讀寫的操作:
r:(預設模式):只讀:以該模式打開文件時,若文件不存在則報錯,若文件存在,則文件指針在文件開頭,即從文件開頭開始讀文件
w:只寫:以該模式打開文件時,若文件不存在則創建一個文件,如文件存在,則清空文件內容,文件指針移到開頭
a:追加寫:以該模式打開文件時,若文件不存在則創建一個文件,如文件存在,則將文件指針移到文件末尾,在文件末尾寫入新的內容
6.控制文件讀寫內容的模式:(t 和 b都不能單獨使用,必須與r,w,a結合使用)
t:(預設):無論讀寫都是以字元為單位,只能識別文本文件,必須要制定encoding
b:無論讀寫都是以位元組為單位,可以識別所有文件,一定不能指定encoding
7.文件的拷貝
with open ('a.txt',mode='rb') as af,\ open('b.txt',mode='wb') as bf: data=af.read f.write(data)
執行程式後,打開文件,即可發現文件已成功拷貝,這裡使用 b 而不是用 t 模式,是因為文件有多種格式
8.文件的修改:
文件的修改是在硬碟上實現文件的覆蓋,相當於一個新的文件以舊的文件名來命名的; 文件的修改有倆種方式,分別適用於不同的情景
方式一(適用於容量小的文件):這種方式的原理是:創建一個新的文件,將舊文件的內容拷貝到新的文件中;這樣記憶體里就存在倆個文件,故不適用於容量大的文件,具體代碼見下方 View
with open('a.txt',mode='rt',encoding='utf-8') as f: data=f.read() data_new=data.replace('yang', 'yv') with open('b.txt',mode='wt',encoding='utf-8')as p: p.write(data_new)View Code
方式二(適用於容量大的文件):此方式的原理為:讀取舊文件的一行內容,修改後寫到臨時文件中,迴圈往複直到寫完,然後將源文件刪除,將臨時文件命名為源文件名.這種方式在記憶體中只存在2行文件,節省記憶體,可用於大文件
import os with open('b.txt',mode='rt',encoding='utf-8') as f,\ open('.b.txt.swap',mode='wt',encoding='utf-8') as p: for line in f: p.write(line.replace('yv','yang')) # 調用replace方法,將源文件中的'yv',換成'yang' os.remove('b.txt') os.rename('.b.txt.swap','b.txt')View Code
9. 文件的階段:truncate(n)
將文件中n個位元組後內容全刪了,當 n 不存在時,即刪除文件全部內容
10.文件內指針的移動
f.seek(): 指針的移動是以位元組為單位的
seek 有三種模式:
0:(預設模式) 指針在文件開頭,只有在 0 模式可以在 t 模式下用,也可以在 b 模式下用,而 1 ,2 模式只能在 b 模式下使用
1: 指針在當前位置
2: 指針在文件末尾
以下為具體事例:
# 0 with open('a.txt',mode='rt',encoding='utf-8')as f: f.seek(3,0) print(f.tell()) # 指針當前位置 print(f.read()) # 從指針後讀出所有內容 # 1 參照指針當前位置 with open('a.txt',mode='rb')as f: f.read(2) f.seek(4,1) print(f.tell()) print(f.read().decode('utf-8')) # 2 參照文件末尾 with open('a.txt',mode='rb')as f: f.seek(-5,2) print(f.tell()) print(f.read().decode('utf-8'))View Code
當 seek處於 2 模式時,可以將文件中新加入的內容列印出來,具體代碼如下:
# 另一個文件進行寫操作,寫的代碼如下: with open('a.txt',mode='at',encoding='utf-8')as f: f.write('hello world\n') # 每在文件中寫入新的內容,都列印出來,以下代碼執行列印操作: import time with open('a.txt',mode='rb')as f: f.seek(0,2) while True: line=f.readline() # readline 可以讀取沒有內容的部分 # print(line.decode('utf-8')) if len(line)==0: time.sleep(0.1) else: print(line.decode('utf-8'))View Code