嗨,我剛開始學習如何在 Python 中讀取檔案。因此,我開始使用 Python 使用以下代碼撰寫檔案:
with open('dog_breeds.txt', 'w') as writer:
writer.write("Pug\r\nJack Russell Terrier\r\nEnglish Springer Spaniel\r\nGerman Shepherd\r\nStaffordshire Bull Terrier\r\nCavalier King Charles Spaniel\r\nGolden Retriever\r\nWest Highland White Terrier\r\nBoxer\r\nBorder Terrier\r\n")
writer.close()
這會生成一個 .txt 檔案,該檔案的影像可以在此處看到。
然后,我開始運行以下代碼:
import time
reader = open('dog_breeds.txt', 'r ')
line = reader.readline()
print('Output of readline while loop is: ')
while line != '':
print(line, end='')
time.sleep(1)
line = reader.readline()
reader.close()
然后,當我執行代碼時,我得到了這個輸出:
Output of readline while loop is:
Pug
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
所以,我有點困惑。我認為end = ''print() 中的引數將導致 .txt 檔案中的每一行都列印在列印的前一行的末尾,從而導致顯示一個長行(即 PugJackRussellTerrierEnglish ...)。相反,顯示的是多行,.txt 檔案中的每一行都是單獨的行。我有什么誤解嗎?
uj5u.com熱心網友回復:
默認情況下,python 在 print 中使用新行。(print 具有end="\n"默認值)
您的檔案用于每一行,因此如果您嘗試在回圈中使用普通列印(不帶)\r\n逐行列印它end=""
它會列印出類似這種格式的東西:
*first_line_in_file
*new empty line because you have \r\n
*new empty line because python print(end="\n")
*second line
...
但現在 end="" 是這樣的:
*first_line_in_file
*new empty line because you have \r\n
*second line
...
結論:
end=""不會\n從您的文本中洗掉它只是阻止 python\n向您的輸出添加額外內容。
uj5u.com熱心網友回復:
我不知道您是否使用 Windows,但是當我運行您的代碼時:
with open('dog_breeds.txt', 'w') as writer:
writer.write("Pug\r\nJack Russell Terrier\r\nEnglish Springer Spaniel\r\nGerman Shepherd\r\nStaffordshire Bull Terrier\r\nCavalier King Charles Spaniel\r\nGolden Retriever\r\nWest Highland White Terrier\r\nBoxer\r\nBorder Terrier\r\n")
在我的 Windows 機器上,換行符\r\n會創建兩個換行符:
Pug
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
因此,當您開始讀取檔案時,即使您使用end=''引數進行列印,仍然會有一個額外的新行。
為了克服這個問題,您需要在剝離時檢查該行是否有資料,然后列印它,如果該行有資料,例如:
with open('dog_breeds.txt') as reader:
for line in reader:
if line.rstrip(): # if the stripped line has data
print(line.rstrip(), end='')
結果:
PugJack Russell TerrierEnglish Springer SpanielGerman ShepherdStaffordshire Bull TerrierCavalier King Charles SpanielGolden RetrieverWest Highland White TerrierBoxerBorder Terrier
uj5u.com熱心網友回復:
以下是適用于 Unix 和 Windows 系統的內容:
import re
FILE = 'dog_breeds.txt'
with open(FILE, 'w') as writer:
writer.write("Pug\r\nJack Russell Terrier\r\nEnglish Springer Spaniel\r\nGerman Shepherd\r\nStaffordshire Bull Terrier\r\nCavalier King Charles Spaniel\r\nGolden Retriever\r\nWest Highland White Terrier\r\nBoxer\r\nBorder Terrier\r\n")
with open(FILE) as reader:
print(re.sub('[\r\n]', '', reader.read()))
輸出:
PugJack Russell TerrierEnglish Springer SpanielGerman ShepherdStaffordshire Bull TerrierCavalier King Charles SpanielGolden RetrieverWest Highland White TerrierBoxerBorder Terrier
uj5u.com熱心網友回復:
這個撰寫的腳本可以隨心所欲地執行:
import time
reader = open('dog_breeds.txt', 'r ')
print('Output of readline while loop is: ')
for i in reader:
line = i.rstrip("\n")
if line:
print(line)
time.sleep(1)
reader.close()
注意.replace("\n", "")。
運行上述代碼的結果是以下輸出:
Output of readline while loop is:
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
每一行都將在一秒鐘后按照您在代碼中的預期列印。
uj5u.com熱心網友回復:
https://docs.python.org/3/library/functions.html#print
“sep 和 end 都必須是字串;它們也可以是 None,這意味著使用默認值。如果沒有給出物件,print() 將只寫 end。”
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/505060.html
標籤:Python python-3.x 文件
