檔案過大保護
由於read是一次性讀取檔案所有的內容,如果檔案100g,記憶體就會吃不消,所以推薦使用read(size)一次讀取指定位元組/字元(根據rb,或者rt指定不同的讀取內容)或者readline()每次讀取一行等操作重複讀,避免這種情況
同時讀寫操作(不推薦愛使用)
檔案指標
首先硬碟上從來沒有修改一說,硬碟上只有覆蓋,即新內容覆蓋新內容。
1.seek(offset,whence): offset代表檔案指標的偏移量,偏移量的單位是位元組個數
0相當於檔案頭開始;1相當於當前檔案所在位置;2相當於檔案末尾
檔案內容123456789
with open("prize2.txt","r",encoding="gbk")as file:
file.seek(4,0)
print(file.read())
file.seek(2,0)
print(file.read())
file.seek(0,2)
print(file.read())
56789
3456789
最後一次由於指標指到了最後,所以讀取內容為空
2.tell(): 每次統計都是從檔案開頭到當前指標所在位置
with open("prize2.txt","r",encoding="gbk")as file:
file.seek(4,0)
print(file.read())
print(file.tell())
56789
93.truncate(n): truncate(n)是截斷檔案,所以檔案的開啟方式必須可寫,但是不能用w或w+等方式開啟,因為那樣直接清空檔案了,所以truncate()要在r+或a或a+等模式下測試效果。它的參照物永遠是檔案頭。並且truncate()不加引數,相當於清空檔案。
原始檔 :123456789
with open("prize2.txt","a",encoding="gbk")as file:
file.truncate(2)
擷取後:12
注意的是,它是按照位元組擷取的,所以遇到多位元組組成的字元需要注意,擷取後亂碼的問題
呼叫系統功能操作檔案
將硬碟存放的該檔案的內容一行一行地讀入記憶體,修改完畢就寫入新檔案,最後用新檔案覆蓋原始檔。(模擬檔案修改)
import os
with open("prize2.txt","r",encoding="gbk")as file1,\
open("prize4.txt","a",encoding="gbk") as file2:
for line in file1:
line=line.replace("1","2")
file2.write(line)
os.remove('prize2.txt')
os.rename('prize4.txt', 'prize2.txt')
print('done...')
總而言之,修改檔案內容的思路為:以讀的方式開啟原檔案,以寫的方式開啟乙個新的檔案,把原檔案的內容進行修改,然後寫入新檔案,之後利用os模組的方法,把原檔案刪除,重新命名新檔案為原檔名,達到以假亂真的目的。
參考部落格
Python 高階檔案操作
python內建的os模組除了可以對目錄進行操作,還可以對檔案進行一些高階操作,具體函式如下 函式說明 access path,accessmode 獲取對檔案是否有指定的訪問許可權 讀取 寫入 執行許可權 accessmode的值是r ok 讀取 w ok 寫入 x ok 執行 或f ok 存在 ...
Python檔案高階操作
1 指標移動的單位都是以bytes 位元組為單位 只有一種情況特殊 t模式下的read n n代表的是字元個數 db.txt檔案中的內容為 yanjialuo 123zhangchenxiao 123with open r db.txt mode rt encoding utf 8 as f f.s...
python高階 檔案讀寫操作
python讀寫檔案 1.open 使用open開啟檔案後一定要記得呼叫 檔案物件的close 方法。比如可以用try finally語句來確保最後能關閉檔案。f1 open thisfile.txt try f1.read finally f1.close 2.讀檔案 read,readline,...