我很难确定何时使用file.readline到达python中的文件末尾。
fi = open('myfile.txt', 'r')
line = fi.readline()
if line == EOF: //or something similar
dosomething()
C= fp.read()如果c为None:将不起作用,因为我将丢失下一行上的数据,如果一行只有回车符,我将遗漏一个空行。
我看了几十篇或相关的帖子,它们都使用了固有的循环,当它们完成时,这些循环就会中断。我没有循环,所以这对我不起作用。此外,我有文件大小的GB与100的数千行。一个脚本可能要花几天的时间来处理一个文件。因此,我需要知道如何判断何时在python3中的文件末尾。任何帮助都是非常感谢的。谢谢!
发布于 2017-08-21 03:56:12
我遇到了同样的问题。我的特定问题是对两个文件进行迭代,其中较短的文件应该只读取较长文件的特定读取的一行。
正如一些人在这里提到的,逐行迭代的自然方法是,嗯,只需迭代。我坚持这种“自然性”的解决方案是手动利用文件的迭代器属性。如下所示:
with open('myfile') as lines:
try:
while True: #Just to fake a lot of readlines and hit the end
current = next(lines)
except StopIteration:
print('EOF!')
当然,您可以使用自己的IOWrapper类对其进行修饰,但这对我来说已经足够了。只需将所有对readline
的调用替换为对next
的调用,并且不要忘记捕获StopIteration
。
发布于 2020-12-19 07:07:47
检查是否使用fi.readline()
达到EOF的最简单方法是检查返回值的真实性;
line = fi.readline()
if not line:
dosomething() # EOF reached
推理
f.readline()
从文件中读取一行;在字符串的末尾保留换行符(\n
),如果文件没有以换行符结尾,则仅在文件的最后一行省略该字符。这使得返回值明确;如果f.readline()
返回空字符串,则表示已到达文件末尾,而空行由'\n'
表示,这是一个仅包含单个换行符的字符串。
python中唯一错误的字符串是空字符串(''
)。
发布于 2017-07-01 06:47:04
您可以使用tell()
函数的输出来确定最后一个readline
是否更改了流的当前位置。
fi = open('myfile.txt', 'r')
pos = fi.tell()
while (True):
li = fi.readline()
newpos = fi.tell()
if newpos == pos: # stream position hasn't changed -> EOF
break
else:
pos = newpos
根据Python Tutorial的说法
f.tell()返回一个整数,当处于二进制模式时,返回的是文件对象在文件中的当前位置,表示为从文件开始算起的字节数;如果处于文本模式,则返回一个不透明的数字。
..。
在文本文件(那些打开的模式字符串中没有b的文件)中,只允许相对于文件开头的位置进行查找(例外情况是查找到以seek(0,2)结尾的文件),唯一有效的偏移值是从f.tell()返回的偏移值或零。
因为从tell()
返回的值可以用于seek()
,所以它们必须是唯一的(即使我们不能保证它们对应的是什么)。因此,如果在readline()
之前和之后的EOF的值没有改变,那么流位置也没有改变,并且已经到达了EOF(当然也可能是其他一些I/O异常)。读取空行将至少读取换行符并推进流位置。
https://stackoverflow.com/questions/44855064
复制相似问题