python檔案高階操作

2022-01-21 07:53:26 字數 1805 閱讀 8733

檔案過大保護

由於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,...