python中的文件I/O
生活随笔
收集整理的這篇文章主要介紹了
python中的文件I/O
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
讀/寫文件:
- 常規操作
讀文件:f = open('文件路徑',‘r‘ - 讀文本文件 ‘rb' - 讀二進制文件 encoding = 'utf-8' - 指定讀取時的字符編碼)
寫文件:f = open('文件路徑','w‘ - 寫入 'a‘ - 追加寫入 ’wb' - 寫入二進制 ‘ab’ - 追加寫入二進制)
文件操作
關閉文件:f.close()
說明:
open() 函數向操作系統發起調用,打開文件;
中文windows操作系統默認以gbk編碼打開;
f = open('文件路徑',‘選項‘) 把打開的文件賦值給變量f ;
如果是windows系統,文件路徑寫成絕對路徑的話,在前面加 r 或者所有斜杠換成雙斜杠(轉義):
打開文件后記得關閉。
- 上下文管理
??????? 文件操作
說明:
可以在as f, 后面繼續加open(...) as f2:
使用with語句操作文件讀寫,可以自動調用close()f
- 文件操作:
- f.read() 全部讀入,可能會爆內存,括號內可以指定讀入幾個字符
- f.readline() 讀入一行
- f.readlines() 全部讀入,按行返回列表
- f.write 覆蓋寫入,以字符串為單位,換行\n。入宮文件不存在,會新建文件。
- f.writelines 以列表為單位寫入:
f.writelines(['\n1111111\n','2222222\n', '3333333\n']) - f.seek() 移動光標:seek(0) 移動光標到文件起始處;seek(3,0),以文件起始為參照的第三個字節;seek(3, 1),以光標當前位置為參考的第三個字節;seek(3, 0)以文件末尾為參考的第三個字節。注意:讀文件的本質是光標移動的過程,如果用全部讀入的方式讀入對同一文件讀入兩次,那么第二次讀不出來,因為光標已經移到文件末尾了(f.seek(0)可以實現讀兩次。另外對于中文文本,utf-8是以三個字節編碼一個中文字符,所以,通過f.seek(3,0)移動光標時,字節數必須是3的倍數。
f = open('test.txt', 'r',encoding = 'utf-8') # 因為是發起系統調用打開文件,而windows中文操作系統默認是以gbk來打開文件 f.read() # 而文件是以utf-8保存的,就會出現錯誤,所以需要加參數encoding='utf-8' 指定讀取文件時的編碼格式; print(f.read()) # 上面已經讀完了,所以這里不會打印出任何內容,如果在上面加一行 f.seek(0),就可以打印出來 - f.write('abc')==>f.flush 立即刷入硬盤
- f.truncate(字節大小) 從起始位置截取指定的字節,其余的清除,只能在‘a'模式打開執行操作,’w'模式會清空所有內容!
- f.name 查看文件名??? # 以下沒啥卵用
- f.encoding 查看編碼方式
- f.readable() 判斷是否可讀,返回True/False
- f.writable() 判斷是否可寫,返回True/False
- f.tell 查看光標位置
- 讀入二進制文本并查看內容:
f = open('test.txt', 'rb') # 讀的時候不需要指定字符編碼,因為文件在硬盤上就是以二進制存的 print(f.read().decode('utf-8')) # 二進制bytes只能decode,不能encode f.close() # 關閉文件 只需在讀入bytes后用utf-8解碼就可以看到了
- 寫入二進制:
f = open('test.txt', 'ab') f.write('寫入二進制測試'.encode('utf-8')) #只需將寫入的字符utf-8編碼成二進制就可以寫入二進制了 - 進行圖片或視頻這類二進制文件的拷貝:
f_read = open('0.jpg','rb') # bytes ===> decode ====> unicode f_write = open('0_copy.jpg','wb') f_write.write(f_read.read()) # unicode ===> encode ===> bytes f_read.close() f_write.close() - 通過遍歷的方式讀入內容比較安全,不會因為文件過大爆內存:
- 文件按修改的本質:修改的本質是在內存中修改,然后新建文件,覆蓋入原文件硬盤。
文件修改實踐:
#文件修改實踐: # -*- coding: utf-8 -*— f = open('test.txt', 'r') f.readline() f_new = open('.test.txt.swp','w') for line in f:if '測試'in line:line = line.replace('測試','test') # 將原文件中的測試替換位testf_new.write(line)else:f_new.write(line) f.close() # 如果不關閉,下面的os操作會失敗。 f_new.close() import os os.remove('test.txt') # 修改的本質是在內存中修改,然后新建文件,覆蓋入原文件硬盤。 os.rename('.test.txt.swp','test.txt')通過with語句,可以優化操作:
- 統計文件的大小,單位是bytes
import os # 導入模塊 print(os.path.getsize('test.txt'))
總結
以上是生活随笔為你收集整理的python中的文件I/O的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终于搞明白gluPerspective和
- 下一篇: Python排序算法总结