您好,登錄后才能下訂單哦!
方法一:
f = open(file='D:/工作日常/test.txt',mode='r',encoding='utf-8') data = f.read() f.close
方法二:
with open(file='D:/工作日常/test.txt',mode='r',encoding='utf-8') as f data = f.read() file='D:/工作日常/test.txt' 表示文件路徑 mode='r' 表示只讀(可以修改為其他) encoding='utf-8' 表示字符編碼 f.read() 表示讀取所有內容,內容是已經轉換完畢的字符串。 f.close() 表示關閉文件
不清楚要處理的文件是什么編碼處理辦法:
pip install chardet 安裝chardet ##檢測編碼模塊
import chardet f = open('log',mode='rb') data = f.read() f.close() result = chardet.detect(open('log',mode='rb').read()) print(result) 輸出: {'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'} print(chardet.detect(b'Hello, world!')) 輸出: {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
循環文件:
f = open("test.txt",'r',encoding="utf-8") for line in f: print(line) f.close()
寫文件:
f = open(file='D:test.txt',mode='w',encoding='utf-8') f.write('test,test') f.close() file='D:/test.txt' 表示文件路徑 mode='w' 表示只寫 encoding='utf-8' 將要寫入的unicode字符串編碼成utf-8格式 f.write(...)
表示寫入內容,寫入的內容是unicode字符串類型,內部會根據encoding轉換為制定編碼的 01101010101, 即:字節類型 f.close() f = open(file='D:/test.txt',mode='wb') f.write('test,test'.encode('utf-8')) f.close() file='D:/test.txt' 表示文件路徑 mode='wb' 表示只以2進制模式寫 f.write(...) 表示寫入內容,寫入的內容必須字節類型,即:是某種編碼格式的二進制格式 f.close()
注意:
文件操作時,以“w”或者"wb"模式打開,則只能寫,并且在打開的同時會先將內容清空。
在寫入到硬盤上時,必須是某種編碼的二進制,打開時需要注意:
wb,寫入時需要直接傳入以二進制格式,即字節類型
w和encoding,寫入時需要傳入unicode字符串,內部會根據encoding指定的編碼將unicode字符串轉換為該編碼的二進制格式
追加:
把內容追加到文件尾部
f = open("test.txt",'a',encoding="gbk") f.write("\ntest2 北京 167 49 13324523342") f.close()
注意:
文件操作時,以“a”或者“ab”模式打開,則只能追加,即:在原來內容的尾部追加內容
寫入硬盤上時,必須是某種編碼的二進制格式,打開時需要注意:
ab,寫入是需要直接傳入某種編碼的二進制格式,即:字節類型
a和encoding,寫入時需要傳入unicode字符串,內部會根據encoding指定的編碼將unicode字符串轉換為該編碼的二進制格式
讀寫模式:
f = open("test.txt",'r+',encoding="gbk") data = f.read() #可以讀內容 print(data) f.write("\nblack girl 河北 167 50 13542342233") #可以寫 f.close() 寫入的文件追加到文件最后
寫讀模式:
f = open("test.txt",'w+',encoding="gbk") data = f.read() print(data) f.write("\nnewline 1哈哈") f.write("\nnewline 2哈哈") f.write("\nnewline 3哈哈") f.write("\nnewline 4哈哈") print("content",f.read()) f.close() 此時查看文件 內容 發現,里面只有4條newline..內容,之前的舊內容全沒了,事實代表,w+會先把文件清空,再寫新內容,相比w模式,只是支持了一個讀功能,且還只能讀已經寫入的新內容。 seek() 方法用于移動文件讀取指針到指定位置 fileObject.seek(offset[, whence])
參數
offset -- 開始的偏移量,也就是代表需要移動偏移的字節數
whence:可選,默認值為 0。給offset參數一個定義,表示要從哪個位置開始偏移;0代表從文件開頭開始算起,1代表從當前位置開始算起,2代表從文件末尾算起。
seek如果直接寫入文件,偏移量有數據的話就會替換掉之前的數據,這是因為硬盤的存儲原理導致的,當文件存儲硬盤中,硬盤就會劃分一塊空間,存儲數據,當你再次讀取文件時,seek到某個位置,每做出一次修改,就會把原來的數據覆蓋掉,如果想直接插入,是不可能的,因為后邊的數據在硬盤上不會整體向后偏移。
如果想要修改數據,需要把硬盤中的數據全部讀取到內存中,然后在內存中修改數據(增刪改查),修改過后,再把內容全部寫回硬盤,把原來的數據全部覆蓋掉。vim、word各種文本編輯器就是這樣的原理。
占硬盤方式的文件修改代碼示例
import os f_name = "test.txt" f_new_name = "%s.new" % f_name old_str = "喬亦菲" new_str = "[喬亦菲 Yifei Qiao]" f = open(f_name,'r',encoding="utf-8") f_new = open(f_new_name,'w',encoding="utf-8") for line in f: if old_str in line: new_line = line.replace(old_str,new_str) else: new_line = line f_new.write(new_line) f.close() f_new.close() os.rename(f_new_name,f_name) #把新文件名字改成原文件 的名字,就把之前的覆蓋掉了,windows使用os.replace #
練習題:
練習題1 —— 全局替換程序:
寫一個腳本,允許用戶按以下方式執行時,即可以對指定文件內容進行全局替換
`python your_script.py old_str new_str filename`
替換完畢后打印替換了多少處內容
import sys, os, re if len(sys.argv) <= 4: print('usage:./practice.py old_text new_text filename') old_text, new_text = sys.argv[1], sys.argv[2] filename = sys.argv[3] with open(file=filename, mode='r', encoding='utf8') as f: data = f.read() # print(data) count = re.findall(old_text, data) print('修改%s處內容' % len(count)) data = data.replace(old_text, new_text) print(data) with open(file='%s_new' % filename, mode='w', encoding='utf8') as f: f.write(data) os.rename('%s_new' % filename, filename)
模式 | 描述 |
t | 文本模式 (默認)。 |
x | 寫模式,新建一個文件,如果該文件已存在則會報錯。 |
b | 二進制模式。 |
+ | 打開一個文件進行更新(可讀可寫)。 |
U | 通用換行模式(不推薦)。 |
r | 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。 |
rb | 以二進制格式打開一個文件用于只讀。文件指針將會放在文件的開頭。這是默認模式。一般用于非文本文件如圖片等。 |
r+ | 打開一個文件用于讀寫。文件指針將會放在文件的開頭。 |
rb+ | 以二進制格式打開一個文件用于讀寫。文件指針將會放在文件的開頭。一般用于非文本文件如圖片等。 |
w | 打開一個文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
wb | 以二進制格式打開一個文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用于非文本文件如圖片等。 |
w+ | 打開一個文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
wb+ | 以二進制格式打開一個文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用于非文本文件如圖片等。 |
a | 打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
ab | 以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
a+ | 打開一個文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用于讀寫。 |
ab+ | 以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用于讀寫。 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。