亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Python 讀取文件 | 如何在 Python 中打開、讀取和寫入文件

在使用任何編程語言時,讀取和寫入文件是一種常見的操作。您可以對代碼進(jìn)行編程以從文件中讀取數(shù)據(jù)或指令,然后再寫入數(shù)據(jù)。這提高了效率并減少了人工。

Python 有一個定義明確的方法來打開、讀取和寫入文件。Python 中文件操作的一些應(yīng)用程序包括:讀取數(shù)據(jù)以進(jìn)行算法訓(xùn)練和測試、讀取文件以創(chuàng)建生成藝術(shù)、報(bào)告和讀取配置文件。 ?

在本教程中,您將學(xué)習(xí):

  1. 如何將文件加載到主內(nèi)存并創(chuàng)建文件句柄。
  2. 如何使用文件句柄打開文件進(jìn)行讀寫。
  3. 處理文件時的異常處理。

先決條件:

  • 確保您安裝了最新的 Python 版本。
  • 熟悉您選擇的任何 Python 支持的文本編輯器。
  • 熟悉基本的 Python 語法。

要快速訪問 Python IDE,請查看Replit。你也可以克隆這個repo 并在 Replit 上運(yùn)行它。

持久性以及如何將文件加載到主內(nèi)存中

文件駐留在計(jì)算機(jī)的輔助內(nèi)存中。輔助內(nèi)存是持久的,這意味著當(dāng)計(jì)算機(jī)斷電時數(shù)據(jù)不會被擦除。對文件進(jìn)行更改并保存后,更改將永久寫入并保存在輔助存儲器中。

要處理文件,我們需要先將它們加載到主內(nèi)存中。主內(nèi)存是臨時緩存內(nèi)存,用于在短時間內(nèi)保存請求的數(shù)據(jù)。計(jì)算機(jī)斷電時數(shù)據(jù)丟失。

文件從輔助存儲器加載到主存儲器,然后由 CPU 處理。 處理完成后,數(shù)據(jù)將被寫回輔助存儲器。
文件從輔助存儲器加載到主存儲器,然后由 CPU 處理。處理完成后,數(shù)據(jù)將被寫回輔助存儲器。

Python 通過“文件處理程序”與加載到主內(nèi)存中的文件進(jìn)行交互。讓我們詳細(xì)看看文件處理程序。

文件處理程序如何工作

當(dāng)我們要讀取或?qū)懭胛募r,我們必須先打開它。打開文件向操作系統(tǒng)發(fā)出信號,以按文件名搜索文件并確保其存在。

如果打開成功,操作系統(tǒng)將返回一個文件處理程序。然后我們可以通過文件處理程序與我們的文件進(jìn)行交互。

文件處理程序不包含數(shù)據(jù)本身,它只是提供一個處理文件操作的接口。

文件處理程序使您的程序可以訪問輔助存儲器中的數(shù)據(jù)。
文件處理程序使您的程序可以訪問輔助存儲器中的數(shù)據(jù)。

如何打開文件

在本例中,我們將打開文件daffodils.txt.?請注意,此文件應(yīng)存儲在與 Python 程序相同的文件夾中。daffodils.txt您可以從此GitHub 鏈接下載該文件。

請看一下該文件,因?yàn)槲覀儗⒃诮酉聛淼氖纠惺褂盟膬?nèi)容。

例子:

fhand = open('daffodils.txt')
print(fhand)

fhand在上面的示例中,如果打開成功,操作系統(tǒng)將返回變量中的文件句柄。默認(rèn)情況下,您只能讀取文件。

輸出:

圖像 177
文件句柄的輸出。

在輸出中,我們收到了一個文件句柄,其中name是文件名和mode權(quán)限,在我們的例子中是r(代表read)。encoding是 Unicode 字符集的編碼機(jī)制。您可以在此處了解有關(guān) UTF-8 的更多詳細(xì)信息。

例外:

如果文件不存在,我們會得到如下異常:

找不到文件時的異常。
找不到文件時的異常。

如何打印文件

現(xiàn)在我們有了文件句柄,這意味著我們可以訪問該文件。讓我們打印文件并查看其內(nèi)容。

例子:

# Get the file handler
fhand = open('daffodils.txt')

# Loop through each line via file handler
for line in fhand:
  print(line) 

輸出:

圖像 179
打印文件的內(nèi)容。

我們能夠成功訪問和打印文件。但是,您是否注意到我們在每行之間出現(xiàn)了額外的空白行?對此有一個解釋。讓我們在下一節(jié)中看到。

如何處理額外的行空間

換行符在 Python 中由 表示n。當(dāng)放置在字符串中的任何位置時,此字符會添加一個新行。

每行末尾都有一個換行符,用于將輸出打印到下一行。我們可以使用該repr方法對其進(jìn)行可視化。

根據(jù) Python文檔,該repr()方法返回一個包含對象可打印表示的字符串。這意味著我們可以看到t or a n出現(xiàn)在字符串中的任何特殊字符,例如 a。 ?

讓我們在下面運(yùn)行一個示例并查看輸出。

圖像 180
使用 . 表示字符串repr()。

例子:

回到我們的文件,我們可以repr()用來檢查特殊字符。

# Get the file handler
fhand = open('daffodils.txt')

# Loop through each line via file handler
for line in fhand:
  print(repr(line)) 

輸出:

圖像 181
在這里,我們可以看到幕后發(fā)生的事情。

此外,print 方法默認(rèn)添加一個新行。這意味著使用 print,我們將在輸出中獲得另一個新行。我們可以使用兩種方法來處理這個額外的行。

 

方法 #1:更改 print 的默認(rèn)結(jié)束值

下面的代碼片段顯示了該print函數(shù)的參數(shù)。我們可以看到默認(rèn)情況下 的end值為n。這意味著每個打印語句都以n.

圖像 22
來源:Python為空白,這樣我們就不會在每行末尾換行。讓我們看下面的例子來更好地理解。

# 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")

輸出:

圖像 182
使用 .在相同和不同的行上打印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() 打印沒有多余的行。
使用print().

方法 #2:使用 rstrip() 方法

strip()我們可以使用該方法刪除字符串周圍的某些字符。

現(xiàn)在我們知道,默認(rèn)情況下,文件中的每一行都有"n"結(jié)尾。由于我們只關(guān)心右邊的字符,我們將使用rstrip()which 代表 right-strip。我們將討論rstrip()下一個示例。

strip()您可以在此博客文章中了解有關(guān)該方法的更多信息。

# 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)

輸出:

使用 rstrip() 打印沒有多余的行。
使用 rstrip 打印沒有額外的行()。

如何讓用戶選擇文件

我們可以通過讓用戶選擇文件來使代碼動態(tài)化,而不是硬編碼文件名。

讓我們讓用戶輸入一個文件名。然后我們將計(jì)算文件中的行數(shù)。

例子:

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 中編寫文件

默認(rèn)情況下,文件處理程序以讀取模式打開文件。如果我們使用以下任何一種模式打開文件,我們就可以寫入文件:

  • w- (寫入)寫入現(xiàn)有文件但刪除現(xiàn)有內(nèi)容。
  • a- (追加)追加到現(xiàn)有文件。
  • x- (創(chuàng)建)創(chuàng)建一個文件,如果文件存在則返回錯誤。

如何寫入文件

請注意,如果我們嘗試使用w標(biāo)志打開一個已經(jīng)存在的文件,則內(nèi)容將被覆蓋。

# 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標(biāo)志附加到現(xiàn)有內(nèi)容并保留現(xiàn)有內(nèi)容。

# Open file with mode 'a'
fout = open('flower.txt', 'a')
fout.write("Now the file has more content at the end!")
fout.close()

如何創(chuàng)建文件并寫入

x模式創(chuàng)建一個文件并向其中添加內(nèi)容。

# 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'

異常處理

我們請求的文件可能不存在。由于異常,這會炸毀程序:

圖像 189

為了讓程序?qū)τ脩舾佑押?,我們可以在一個try-except塊中處理這個異常。

程序中預(yù)期會崩潰的風(fēng)險(xiǎn)部分寫在一個try塊中。如果代碼無異常執(zhí)行,except則跳過該塊并繼續(xù)運(yùn)行程序。如果發(fā)現(xiàn)異常,該塊將使用命令except優(yōu)雅地運(yùn)行并關(guān)閉程序。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)

輸出:

圖像 188
使用 try-except 塊處理異常。

包起來

知道如何使用文件是編程中的一個基本概念。在本教程中,您學(xué)習(xí)了如何使用文件處理程序在 Python 中打開文件以進(jìn)行讀寫。

 

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!