2016-08-16 105 views
-3
number = int(input('Enter Line: ')) 
f = open('path.txt','r') 
text = f.readline(number) 
print(text) 

文件「path.txt」看起來是這樣的:不打印正確的字符串

一號線
2號線
3號線尚未

,無論你輸入什麼號碼,它仍然會返回一號線。

+5

你讀過'readline()'的參數嗎? –

+0

有沒有其他的選擇? –

回答

0

你錯誤地使用了f.readline(),通過這個方法一個參數不會返回一個特定的行號。此方法總是讀取並返回下一行(本例中爲第1行),並且您的參數實際上是作爲子字符串運行的。

f.readline()從文件中讀取一行;一個換行符 (\ n)留在字符串的末尾,並且如果文件沒有以換行符結束,則僅在文件的最後一行 處省略。 https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects

我相信你真的要找的用法是這樣的:

number = int(input('Enter Line: ')) 
f = open('path.txt','r') 
lines = f.readlines() 
print(lines[number]) 

f.readlines()讀取並返回所有行,那麼你可以索引。

See live example

0

我不是一個Python的傢伙,但咋一看一個的文檔告訴我,readline的正是這麼做的......這一次讀取一行開始在文件的開頭。

試試這個:

f = open('path.txt','r') 
print(f.readline()) 
print(f.readline()) 

這應該輸出:

一號線2號線

傳遞給了Readline的參數是字節數讀,而不是行號。

這可能幫助:http://www.tutorialspoint.com/python/file_readline.htm

-1

功能readline()(無功能參數)從文件中讀取一行,因此,您的發言text = f.readline(number)總是在光標返回行。

例如:

number = int(input('Enter Line: ')) 
f = open('path.txt','r') 
print f.readline(number) => print line1 
print f.readline(number) => print line2 

對於你的情況,我認爲你可以這樣做:

number = int(input('Enter Line: ')) 
f = open('path.txt','r') 
lines = f.readlines() 
print lines[number] # if number is not greater than len(lines) 
1

f.readlines()將讀取所有行的內存,如果你的文件非常大,它會吃掉所有記憶。所以我瘦你可以使用下面的代碼。

for line_num, line in eneumerat(lines, 1): 
    if line_num == number: 
     print(text) 
     break