f.readlines()不会返回任何值?

时间:2014-12-14 17:30:39

标签: python file text return return-value

所以我正在阅读Python文档/教程,特别是我正在查看带文件的输入/输出。这是教程所说的将在文件中返回whatevers:

>>> f.readline()
'This is the first line of the file.\n'
>>> f.readline()
'Second line of the file\n'
>>> f.readline()
''

我在.py中添加了相同的内容并且它没有返回任何异常或问题,但它也没有返回任何值。这是我的代码:

f = open('test.txt')

f.readlines()

除非我使用变量和print,否则程序不会返回文件中的任何内容。继承我的文件内容:

Hello This Is Test
For Loops In Files
Flying Away
A Bird also Flies
Wow

关于为什么这不起作用的任何想法?我认为它是我的翻译,因为我正在使用SublimeREPL,但它之前没有做过任何奇怪的事情,所以我不太确定。此外,当我尝试在我的Python控制台中运行它时,它会给我一个错误,然后关闭控制台,所以我甚至看不到错误。相当适得其反。

编辑:只是为了澄清,我的问题不是for循环,for循环已经从之前工作正常。问题是f.readlines()不会返回任何行,即使文档说它应该返回下一行。我将从我的代码中取出for循环来澄清。另外,对不起,如果我混淆了f.readline()f.readlines(),但无论如何它们都不起作用。谢谢,

  • 赛义德
答案:对于遇到过这个问题或者只是好奇的人来说,问题在于脚本编写时我必须使用print,但在命令提示符下,我只能使用f.readlines()和它会读取线条。感谢@wwii。

5 个答案:

答案 0 :(得分:2)

我想出了一个非常相似的问题的答案,以防有人过来找。因此,在Python中,如果您在readline()之前运行了readlines()代码,那么它已经遍历了这些行。

尝试退出,仅输入readlines()作为文件,它将为您提供完整列表。

答案 1 :(得分:0)

如果您想逐行读取文件,这将是一个更好的选择。 f:'中的'以列表的形式迭代文件。 '线'变量包括尾随' \ n'或者' \ r \ n',所以你想剥去那些。

''语句确保即使程序在读取文件时抛出异常,文件也会关闭。

with open('test.txt','r') as f:
    for line in f:
        print(line.rstrip('\n'))

输出:

$ python test.py
Hello This Is Test
For Loops In Files
Flying Away
A Bird also Flies
Wow

使用readlines:

open('test.txt','r') as f:
    lines = f.readlines()

for line in lines:
    print(line.rstrip('\n'))

readlines将文件转换为内存中的列表。如果你必须阅读一个大文件,那就没有效率。

同时使用:

with open('test.txt','r') as f:
    line = f.readline()
    print(line.rstrip('\n'))
    print
    lines = f.readlines()

for line in lines:
    print(line.rstrip('\n'))

输出:

$ python test.py
Hello This Is Test

For Loops In Files
Flying Away
A Bird also Flies
Wow

从python控制台:

$ python
Python 2.7.8 (default, Jul 28 2014, 01:34:03)
[GCC 4.8.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('test.txt')
>>> f.readlines()
['Hello This Is Test\n', 'For Loops In Files\n', 'Flying Away\n', 'A Bird also Flies\n', 'Wow\n', '\n']
>>> f.close()

答案 2 :(得分:0)

f.readlines()在列表中一次性返回所有行,例如:

f=open('test.txt')
f.readlines()
['Hello This Is Test\n', 'For Loops In Files\n', 'Flying Away\n', 'A Bird also Flies\n', 'Wow']  

对于f.readline()将从光标直到文件末尾开始逐行返回行,您的示例输出将为:

f=open('test.txt')
f.readline()
'Hello This Is Test\n'
f.readline()
'For Loops In Files\n'
f.readline()
'Flying Away\n'
f.readline()
'A Bird also Flies\n'
f.readline()
'Wow'
f.readline()
''#empty string

将光标设置为文件的开头,使用seek(0)

答案 3 :(得分:0)

答案:对于遇到过这个问题或者只是好奇的人来说,问题在于脚本编写时我必须使用print,但是在命令提示符下,我可以使用f.readlines()并且它会读取线。感谢@wwii。

答案 4 :(得分:-1)

如果您要使用 readline ,则必须移动光标。它每次都像seek [0],它将光标移动到起点。

  

您可以使用 readlines()方法。

readlines=f.readlines()
for i in readlines:
    print (i)
相关问题