我正在嘗試編寫一個程序來向用戶讀取5行文本文檔,但是我無法設法讓它工作。它目前打印第4行和第5行以及每個文件的「\ n」(換行)。這是代碼:向用戶讀取文檔行(python)
filename = 'text_file_example.txt'
myfile = open(filename,'r')
myfile.readlines(5)
print(myfile.readlines(5))
myfile.close()
閱讀for(range 5)循環中的一行會更好嗎?
我正在嘗試編寫一個程序來向用戶讀取5行文本文檔,但是我無法設法讓它工作。它目前打印第4行和第5行以及每個文件的「\ n」(換行)。這是代碼:向用戶讀取文檔行(python)
filename = 'text_file_example.txt'
myfile = open(filename,'r')
myfile.readlines(5)
print(myfile.readlines(5))
myfile.close()
閱讀for(range 5)循環中的一行會更好嗎?
您正在使用的內建函數readlines()
會以下(from the official documentation):
f.readlines()
返回包含在 文件數據的所有行的列表。如果給出一個可選參數sizehint
,它會從該文件中讀取多個 字節,並且足夠多地完成一行,並從中返回 行。
也許你會想,這樣做:
filename = 'text_file_example.txt'
myfile = open(filename,'r')
file_lines = myfile.readlines()
for line in file_lines[:5]:
print(line)
myfile.close()
非常好,謝謝! – keirbtre
readlines()
返回所有行的列表,所以你應該做的:
lines=myfile.readlines()[:5]
但由於它加載的所有行是不是記憶效率。
所以,一個更好的解決方案,這裏將是使用itertools.islice
:
list(islice(myfile,5)) # it'll return a list of first five lines,
# no need of reading all lines
If given an optional parameter sizehint,
it reads that many bytes from the file and
enough more to complete a line, and returns the lines from that
所以你最好的選擇是使用一個for循環:
for line in myfile.readlines()[:5]:
print line
如果你想限制線的讀取數量,使用itertools.islice
使用文件對象作爲一個迭代,然後片行:
import itertools
filename = 'text_file_example.txt'
with open(filename,'r') as myfile:
# skip five
list(itertools.islice(myfile, 5))
print(*itertools.islice(myfile, 5), sep='', end='') # print 5, use newlines from file
請注意,我們通過了5條讀取線到print()
功能一系列的參數,而不是作爲一個對象,使用*
語法,然後禁用自動空格和換行符;這些行不需要用空格分隔,並且已經包含換行符。
上面的代碼將只有有史以來讀取您的文件的10行,無論它有多大。調用.readlines()
將(嘗試)將整個文件讀入內存,而不管大小和可用內存如何。
你的意思是先跳過5行嗎?你能包括一個輸出的例子嗎? –
另外,這是Python 3嗎?你使用'print()'作爲函數,所以我懷疑你只是想確認。 –