Python 讀取文件 | 如何在 Python 中打開、讀取和寫入文件
在使用任何編程語言時,讀取和寫入文件是一種常見的操作。您可以對代碼進行編程以從文件中讀取數據或指令,然后再寫入數據。這提高了效率并減少了人工。
Python 有一個定義明確的方法來打開、讀取和寫入文件。Python 中文件操作的一些應用程序包括:讀取數據以進行算法訓練和測試、讀取文件以創建生成藝術、報告和讀取配置文件。 ?
在本教程中,您將學習:
- 如何將文件加載到主內存并創建文件句柄。
- 如何使用文件句柄打開文件進行讀寫。
- 處理文件時的異常處理。
先決條件:
- 確保您安裝了最新的 Python 版本。
- 熟悉您選擇的任何 Python 支持的文本編輯器。
- 熟悉基本的 Python 語法。
要快速訪問 Python IDE,請查看Replit。你也可以克隆這個repo 并在 Replit 上運行它。
持久性以及如何將文件加載到主內存中
文件駐留在計算機的輔助內存中。輔助內存是持久的,這意味著當計算機斷電時數據不會被擦除。對文件進行更改并保存后,更改將永久寫入并保存在輔助存儲器中。
要處理文件,我們需要先將它們加載到主內存中。主內存是臨時緩存內存,用于在短時間內保存請求的數據。計算機斷電時數據丟失。

Python 通過“文件處理程序”與加載到主內存中的文件進行交互。讓我們詳細看看文件處理程序。
文件處理程序如何工作
當我們要讀取或寫入文件時,我們必須先打開它。打開文件向操作系統發出信號,以按文件名搜索文件并確保其存在。
如果打開成功,操作系統將返回一個文件處理程序。然后我們可以通過文件處理程序與我們的文件進行交互。
文件處理程序不包含數據本身,它只是提供一個處理文件操作的接口。

如何打開文件
在本例中,我們將打開文件daffodils.txt
.?請注意,此文件應存儲在與 Python 程序相同的文件夾中。daffodils.txt
您可以從此GitHub 鏈接下載該文件。
請看一下該文件,因為我們將在接下來的示例中使用它的內容。
例子:
fhand = open('daffodils.txt')
print(fhand)
fhand
在上面的示例中,如果打開成功,操作系統將返回變量中的文件句柄。默認情況下,您只能讀取文件。
輸出:

在輸出中,我們收到了一個文件句柄,其中name
是文件名和mode
權限,在我們的例子中是r
(代表read
)。encoding
是 Unicode 字符集的編碼機制。您可以在此處了解有關 UTF-8 的更多詳細信息。
例外:
如果文件不存在,我們會得到如下異常:

如何打印文件
現在我們有了文件句柄,這意味著我們可以訪問該文件。讓我們打印文件并查看其內容。
例子:
# Get the file handler
fhand = open('daffodils.txt')
# Loop through each line via file handler
for line in fhand:
print(line)
輸出:

我們能夠成功訪問和打印文件。但是,您是否注意到我們在每行之間出現了額外的空白行?對此有一個解釋。讓我們在下一節中看到。
如何處理額外的行空間
換行符在 Python 中由 表示n
。當放置在字符串中的任何位置時,此字符會添加一個新行。
每行末尾都有一個換行符,用于將輸出打印到下一行。我們可以使用該repr
方法對其進行可視化。
根據 Python文檔,該repr()
方法返回一個包含對象可打印表示的字符串。這意味著我們可以看到t or a n
出現在字符串中的任何特殊字符,例如 a。 ?
讓我們在下面運行一個示例并查看輸出。

repr()
。例子:
回到我們的文件,我們可以repr()
用來檢查特殊字符。
# Get the file handler
fhand = open('daffodils.txt')
# Loop through each line via file handler
for line in fhand:
print(repr(line))
輸出:

此外,print 方法默認添加一個新行。這意味著使用 print,我們將在輸出中獲得另一個新行。我們可以使用兩種方法來處理這個額外的行。
方法 #1:更改 print 的默認結束值
下面的代碼片段顯示了該print
函數的參數。我們可以看到默認情況下 的end
值為n
。這意味著每個打印語句都以n
.

# By default output would go in separate lines
print("Hello")
print("World")
# Print on the same line because end = ' '
# added single space
print("Hello", end = ' ')
print("World")
輸出:

print()
。?回到我們的主文件,讓我們稍微修改一下代碼以獲得沒有額外空行的輸出。
# Get the file handler
fhand = open('daffodils.txt')
# Loop through each line and modify the default value of 'end'
for line in fhand:
print(line, end = '')
輸出:
在這里,我們得到了我們想要的輸出!

print()
.
方法 #2:使用 rstrip() 方法
strip()
我們可以使用該方法刪除字符串周圍的某些字符。
現在我們知道,默認情況下,文件中的每一行都有"n"
結尾。由于我們只關心右邊的字符,我們將使用rstrip()
which 代表 right-strip。我們將討論rstrip()
下一個示例。
strip()
您可以在此博客文章中了解有關該方法的更多信息。
# Get the file handler
fhand = open('daffodils.txt')
# Loop through each line and remove extra line character with rstrip()
for line in fhand:
line = line.rstrip()
print(line)
輸出:

()
。如何讓用戶選擇文件
我們可以通過讓用戶選擇文件來使代碼動態化,而不是硬編碼文件名。
讓我們讓用戶輸入一個文件名。然后我們將計算文件中的行數。
例子:
fname = input('Enter the file name: ')
fhand = open(fname)
count = 0
for line in fhand:
count = count + 1
print('There are', count, 'lines in', fname)
輸出:

如何在 Python 中編寫文件
默認情況下,文件處理程序以讀取模式打開文件。如果我們使用以下任何一種模式打開文件,我們就可以寫入文件:
w
- (寫入)寫入現有文件但刪除現有內容。a
- (追加)追加到現有文件。x
- (創建)創建一個文件,如果文件存在則返回錯誤。
如何寫入文件
請注意,如果我們嘗試使用w
標志打開一個已經存在的文件,則內容將被覆蓋。
# Open file with mode 'w'
fout = open('flower.txt', 'w')
fout.write("This content would be added and existing would be discarded")
fout.close()
如何附加到文件
該a
標志附加到現有內容并保留現有內容。
# Open file with mode 'a'
fout = open('flower.txt', 'a')
fout.write("Now the file has more content at the end!")
fout.close()
如何創建文件并寫入
該x
模式創建一個文件并向其中添加內容。
# Open file with mode 'x'
fout = open('new-file.txt', 'x')
fout.write("Now the new file has some content!")
fout.close()
如果文件存在,我們會得到如下異常:
Traceback (most recent call last):
File "main.py", line 2, in <module>
fout = open('flower.txt', 'x')
FileExistsError: [Errno 17] File exists: 'flower.txt'
異常處理
我們請求的文件可能不存在。由于異常,這會炸毀程序:

為了讓程序對用戶更加友好,我們可以在一個try-except
塊中處理這個異常。
程序中預期會崩潰的風險部分寫在一個try
塊中。如果代碼無異常執行,except
則跳過該塊并繼續運行程序。如果發現異常,該塊將使用命令except
優雅地運行并關閉程序。exit
fname = input('Enter the file name: ')
try:
fhand = open(fname)
except:
print('File nout found and can not be opened:', fname)
exit()
count=0
for line in fhand:
count = count + 1
print('There are', count, 'lines in', fname)
輸出:

包起來
知道如何使用文件是編程中的一個基本概念。在本教程中,您學習了如何使用文件處理程序在 Python 中打開文件以進行讀寫。