[英]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.