您好,登錄后才能下訂單哦!
小編給大家分享一下Python中文件讀寫的操作方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
Python中的文件讀寫-實際操作
用Python打開文件
你需要知道的第一個功能是open()。在Python 2和Python 3中,此命令將返回參數中指定的文件對象。基本功能用法open()如下:
file_object = open(filename, mode)
在此實例中,filename是您要與之交互的文件的名稱,包含文件擴展名。也就是說,如果你有一個文本文件workData.txt,你的文件名不僅僅是"workData"。是的"workData.txt"。
如果您使用的是Windows,還可以指定文件所在的確切路徑,例如“C:\ ThisFolder \ workData.txt”。
但請記住,字符串中的單個反斜杠向Python指示字符串文字的開頭。所以這里有一個問題,因為這兩個含義會發生沖突......
值得慶幸的是,Python有兩種方法可以解決這個問題。第一種是使用雙反斜杠:"C:\\ThisFolder\\workData.txt"。第二種是使用正斜杠:"C:/ThisFolder/workData.txt"。
open函數中的模式告訴Python你要對文件做什么。處理文本文件時可以指定多種模式。
'w'- 寫入模式:當需要更改文件并更改或添加信息時,使用此模式。請記住,這會擦除現有文件以創建新文件。文件指針位于文件的開頭。
'r'- 讀取模式:當文件中的信息僅用于讀取而不以任何方式更改時,使用此模式。文件指針位于文件的開頭。
'a'- 附加模式:此模式自動將信息添加到文件末尾。文件指針放在文件的末尾。
'r+'- 讀/寫模式:當您要更改文件并從中讀取信息時使用。文件指針位于文件的開頭。
'a+'- 附加和讀取模式:打開文件以允許將數據添加到文件末尾,并讓程序也讀取信息。文件指針放在文件的末尾。
使用二進制文件時,將使用相同的模式說明符。但是,您將ab添加到最后。所以二進制文件的寫模式說明符是'wb'。其余的是'rb','ab','r+b',和'a+b'分別。
在Python 3中,添加了一個新模式:
'x'- 獨占創建模式:此模式專門用于創建文件。如果已存在同名文件,則函數調用將失敗。
我們來看一個如何打開文件和設置訪問模式的示例。
使用該open()函數時,通常會將其結果賦給變量。給定一個名為的文件workData.txt,打開文件進行讀寫的正確代碼如下:
data_file = open("workData.txt", "r+")
這將創建一個名為的對象data_file,然后我們可以使用Pythons 文件對象方法進行操作。
我們'r+'在這個代碼示例中使用了訪問模式,它告訴Python我們要打開文件進行讀寫。這為我們提供了很大的靈活性,但通常您可能希望將程序限制為只讀取或只是寫入文件,這是其他模式派上用場的地方。
在Python中關閉文件
在閱讀和寫作時,了解如何關閉文件非常重要。
它釋放了程序用于I / O目的的系統資源。編寫具有空間或內存限制的程序時,可以有效地管理資源。
此外,關閉文件可確保將任何掛起的數據寫入底層存儲系統,例如本地磁盤驅動器。通過顯式關閉文件,您可以確保刷新內存中的任何緩沖數據并將其寫入文件。
在Python中關閉文件的功能很簡單fileobject.close()。使用data_file我們在上一個示例中創建的文件對象,關閉它的命令將是:
data_file.close()
關閉文件后,在以后重新打開文件之前,您無法再訪問該文件。嘗試讀取或寫入已關閉的文件對象將引發ValueError異常:
>>> f = open("/tmp/myfile.txt", "w") >>> f.close() >>> f.read()Traceback (most recent call last): File "<input>", line 1, in <module> f.read()ValueError: I/O operation on closed file.
在Python中,打開和關閉文件的最佳實踐使用with關鍵字。嵌套代碼塊完成后,此關鍵字將自動關閉文件:
with open("workData.txt", "r+") as workData: # File object is now open. # Do stuff with the file: workData.read() # File object is now closed. # Do other things...
如果您不使用該with關鍵字或使用該fileobject.close()函數,那么Python將通過內置的垃圾收集器自動關閉并銷毀文件對象。但是,根據您的代碼,此垃圾收集可以隨時進行。
所以建議使用with關鍵字來控制何時關閉文件 - 即在內部代碼塊完成執行之后。
使用Python文件對象
成功打開文件后,可以使用內置方法處理新文件對象。您可以從中讀取數據,也可以向其中寫入新數據。還有其他操作,如移動“讀/寫指針”,它確定從中讀取文件數據的位置以及寫入的位置。
接下來,將學習如何從打開的文件中讀取數據:
在Python中從文件中讀取數據
讀取文件的內容使用該fileobject.read(size)方法。默認情況下,此方法將讀取整個文件并將其作為字符串(在文本模式下)或字節對象(在二進制模式下)打印到控制臺。
但是,使用默認大小時必須小心。如果您正在閱讀的文件大于可用內存,則無法一次訪問整個文件。在這種情況下,您需要使用該size參數將其分解為內存可以處理的塊。
該size參數告訴read方法有多少字節進入文件返回顯示。因此,我們假設我們的“workData.txt”文件中包含以下文本:
This data is on line 1 This data is on line 2 This data is on line 3
然后,如果您在Python 3中編寫以下程序:
with open("workData.txt", "r+") as work_data: print("This is the file name: ", work_data.name) line = work_data.read() print(line)
你會得到這個輸出:
This is the file name: workData.txt This data is on line 1 This data is on line 2 This data is on line 3
另一方面,如果你調整第三行說:
line = workData.read(6)
您將獲得以下輸出:
This is the file name: workData.txt This d
如您所見,讀取操作僅讀取文件中的數據到位6,這是我們傳遞給read()上面的調用的內容。這樣,您可以一次性限制從文件中讀取的數據量。
如果再次從同一文件對象中讀取,它將繼續讀取您中斷的數據。這樣,您就可以在幾個較小的“塊”中處理大型文件。
逐行閱讀文本文件 readline()
您還可以通過逐行讀取來解析文件中的數據。這可以讓您逐行掃描整個文件,只在您想要的時候前進,或者讓您看到特定的行。
該fileobject.readline(size)方法默認返回文件的第一行。但是通過更改整數size參數,您可以獲得所需文件中的任何行。
例如:
with open("workData.txt", "r+") as work_data: print("This is the file name: ", work_data.name) line_data = work_data.readline() print(line_data)
這將返回以下輸出:
This is the file name: workData.txt This data is on line 1
將a 2或a 3作為size變量將相應地返回第二行或第三行。
類似的方法是fileobject.readlines()調用(注意復數),它以元組格式返回每一行。如果您打電話:
print(work_data.readlines())
您將獲得以下輸出:
['This data is on line 1', 'This data is on line 2', 'This data is on line 3']
如您所見,這會將整個文件讀入內存并將其拆分為多行。但這僅適用于文本文件。二進制文件只是一個數據塊 - 它實際上并不具有單行的概念。
逐行處理整個文本文件
在Python中逐行處理整個文本文件的最簡單方法是使用一個簡單的循環:
with open("workData.txt", "r+") as work_data: for line in work_data: print(line)
這有以下輸出:
This data is on line 1 This data is on line 2 This data is on line 3
這種方法非常節省內存,因為我們將單獨讀取和處理每一行。這意味著我們的程序永遠不需要立即將整個文件讀入內存。因此,使用readline()是一種以較小的塊處理大文本文件的舒適且有效的方式。
使用Python寫入文件到Python write()
如果您無法向他們寫入數據,那么文件就不會有任何好處。
請記住,當您創建新文件對象時,如果文件尚不存在,Python將創建該文件。首次創建文件時,您應該使用a+或w+模式。
通常最好使用該a+模式,因為數據將默認添加到文件的末尾。使用w+將清除文件中的任何現有數據,并為您提供“空白”。
在Python中寫入文件的默認方法是使用fileobject.write(data)。例如,您可以使用以下代碼在我們的“workData.txt”文件中添加一個新行:
work_data.write("This data is on line 4\n")
的\n充當新行指示,移動后續寫入到下一行。
如果要將不是字符串的內容寫入文本文件(例如一系列數字),則必須使用轉換代碼將它們轉換或“轉換”為字符串。
例如,如果要將整數1234,5678,9012添加到work_data文件中,則執行以下操作。首先,將非字符串轉換為字符串,然后將該字符串寫入文件對象:
values = [1234, 5678, 9012]with open("workData.txt", "a+") as work_data: for value in values: str_value = str(value) work_data.write(str_value) work_data.write("\n")
文件搜索:移動讀/寫指針
請記住,使用a+模式編寫時,文件指針始終位于文件末尾。因此,在我們編寫兩個數字的情況下使用上面的代碼,如果你使用這個fileobject.write()方法,你就不會得到任何回報。那是因為該方法正在尋找指向其他文本的指針。
那么你需要做的是將指針移回文件的開頭。最簡單的方法是使用該fileobject.seek(offset, from_what)方法。在此方法中,您將指針放在特定位置。
偏移量是from_what參數中的字符數。該from_what參數有三個可能的值:
0 - 表示文件的開頭
1 - 表示當前指針位置
2 - 表示文件的結尾
當您使用文本文件(那些在模式下沒有使用ab打開的文件)時,您只能使用默認值0或a seek(0, 2),它將帶您到文件的末尾。
因此,通過work_data.seek(3, 0)在我們的“workData.txt”文件中使用,您將指針放在第4個字符處(請記住,Python開始計數為0)。如果使用行打印循環,則會得到以下輸出:
s data is on line 1 This data is on line 2 This data is on line 3
如果要檢查指針的當前位置,可以使用該fileobject.tell()方法,該方法返回當前文件中指針所在位置的十進制值。如果我們想查找當前work_data文件的時長,我們可以使用以下代碼:
with open("workData.txt", "a+") as work_data: print(work_data.tell())
這將返回69,這是文件的大小。
使用Python編輯現有文本文件
您需要編輯現有文件而不是僅向其附加數據。你不能只使用w+模式來做到這一點。請記住,該模式w將完全覆蓋該文件,因此即使使用fileobject.seek(),您也無法執行此操作。而且a+總是在文件的末尾插入任何數據。
最簡單的方法是將整個文件拉出來并使用它創建列表或數組數據類型。創建列表后,您可以使用該list.insert(i, x)方法插入新數據。創建新列表后,您可以將其重新連接在一起并將其寫回文件。
請記住,對于list.insert(i, x),i是一個整數,表示細胞數。然后將x的數據放在指示的列表中的單元格之前i。
例如,使用我們的“workData.txt”文件,假設我們需要在第一行和第二行之間插入文本行“這在第1行和第2行之間”。這樣做的代碼是:
# Open the file as read-only with open("workData.txt", "r") as work_data: work_data_contents = work_data.readlines() work_data_contents.insert(1, "This goes between line 1 and 2\n") # Re-open in write-only format to overwrite old file with open("workData.txt", "w") as work_data: work_dataContents = "".join(work_data_contents) work_data.write(work_data_contents)
運行此代碼后,如果執行以下操作:
with open("workData.txt", "r") as work_data: for line in work_data: print(line)
你會得到一個輸出:
This data is on line 1 This goes between line 1 and 2 This data is on line 2 This data is on line 3
看完了這篇文章,相信你對Python中文件讀寫的操作方法有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。