2016-08-16 106 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