无法让Python读取到文件的末尾

2024-09-30 05:24:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过几种不同的方法,但结果似乎总是一样的。我不能让Python阅读,直到文件结束。它只停了一半左右。我尝试过二进制和ASCII模式,但这两种模式的结果是一样的。我还检查了文件中的任何特殊字符,其中没有任何特殊字符。另外,我试着指定要读多少,但它仍然在同一个地方被切断。在

它是这样的:

f=open("archives/archivelog", "r")
logtext=f.read()
print logtext

无论我是从bash调用它,还是从python调用它,无论我是普通用户还是根用户,都会发生这种情况。在

但是,如果文件和我在同一个目录中,它可以正常工作。在

^{pr2}$

这就像做梦一样。知道为什么吗?在


Tags: 文件方法bashread地方ascii二进制模式
3条回答

关于^{}的Python参考手册说:

Also note that when in non-blocking mode, less data than was requested may be returned, even if no size parameter was given.

还有一份关于那件事的草稿,显然没有被接受。政治公众人物是Python Enhancement Proposal。在

因此,令人遗憾的是,您不能依赖read()在一次调用中为您提供完整的文件。在

如果文件是文本文件,我建议您使用^{}。它会给你一个包含文件每一行的列表。据我所知,readlines()是可靠的。在

read方法返回分块的文件内容。必须再次调用它,直到它返回空字符串('')。在

http://docs.python.org/tutorial/inputoutput.html#methods-of-file-objects

从Kelketek的回答中跳出来:

我不记得我在哪里读到的,但基本上Python垃圾收集器“偶尔”运行,不保证何时收集给定的对象。flush()函数的作用相同:http://docs.python.org/library/stdtypes.html#file.flush。我收集到的是flush()将数据放在某个缓冲区中以供写入,由您的操作系统决定何时执行。可能其中一个或两个都是你的问题。在

你是不是写完文件就开始读了?这可能会导致竞态条件(http://en.wikipedia.org/wiki/Race_condition),这是一类通常很奇怪的、可能是随机的/很难重现的bug,这些bug通常不会出现在像Python这样的高级语言中。在

相关问题 更多 >

    热门问题