繁体   English   中英

Python readlines 不返回任何内容?

[英]Python readlines not returning anything?

我有以下代码:

with open('current.cfg', 'r') as current:
    if len(current.read()) == 0:
        print('FILE IS EMPTY')
    else:
        for line in current.readlines():
            print(line)

该文件包含以下内容:

#Nothing to see here
#Just temporary data
PS__CURRENT_INST__instance.12
PS__PREV_INST__instance.16
PS__DEFAULT_INST__instance.10

但出于某种原因, current.readlines()每次current.readlines()返回一个空列表。

代码中可能有一个愚蠢的错误或错字,但我就是找不到。 提前致谢。

你读的文件已经和文件指针不在文件的末尾 然后调用readlines()不会返回数据。

只读取一次文件:

with open('current.cfg', 'r') as current:
    lines = current.readlines()
    if not lines:
        print('FILE IS EMPTY')
    else:
        for line in lines:
            print(line)

另一种选择是在再次阅读之前回到起点:

with open('current.cfg', 'r') as current:
    if len(current.read()) == 0:
        print('FILE IS EMPTY')
    else:
        current.seek(0)
        for line in current.readlines():
            print(line)

但这只是在浪费 CPU 和 I/O 时间。

最好的办法是尝试和读取数据量,或寻求到了最后,通过把文件大小file.tell()然后再寻找回到起点,一切不读。 然后将该文件用作迭代器,以防止将所有数据读入内存。 这样,当文件非常大时,您就不会产生内存问题:

with open('current.cfg', 'r') as current:
    if len(current.read(1)) == 0:
        print('FILE IS EMPTY')
    else:
        current.seek(0)
        for line in current:
            print(line)

或者

with open('current.cfg', 'r') as current:
    current.seek(0, 2)  # from the end
    if current.tell() == 0:
        print('FILE IS EMPTY')
    else:
        current.seek(0)
        for line in current:
            print(line)

当您执行current.read() ,您会消耗文件的内容,因此后续的current.readlines()返回一个空列表。

Martijn Pieters 的代码是要走的路。

或者,您可以在readlines()之前使用current.seek(0)倒带到文件的开头,但这会不必要地复杂化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM