2012-12-21 36 views
2

我正在嘗試編寫一個程序來向用戶讀取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)循環中的一行會更好嗎?

+1

你的意思是先跳過5行嗎?你能包括一個輸出的例子嗎? –

+0

另外,這是Python 3嗎?你使用'print()'作爲函數,所以我懷疑你只是想確認。 –

回答

4

您正在使用的內建函數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() 
+0

非常好,謝謝! – keirbtre

0

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 
0

根據documentation

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 
0

如果你想限制線的讀取數量,使用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()將(嘗試)將整個文件讀入內存,而不管大小和可用內存如何。