关于python:为什么我不能在打开的文件上两次调用read()?
Why can't I call read() twice on an open file?
对于我正在做的练习,我试图使用read()方法两次读取给定文件的内容。 奇怪的是,当我第二次调用它时,似乎没有将文件内容作为字符串返回?
这是代码
|
我当然知道这不是最有效或最好的方法,这不是重点。 关键是,为什么不能两次调用read()? 我是否需要重置文件句柄? 还是关闭/重新打开文件以执行此操作?
相关讨论
调用read()会读取整个文件,并将读取的游标留在文件的末尾(没有其他要读取的内容)。如果您希望一次读取一定数量的行,则可以使用readline(),readlines()或使用for line in handle:遍历行。
要直接回答您的问题,一旦使用read()读取了文件,就可以使用seek(0)将读取的光标返回到文件的开头(此处是文档)。如果您知道文件不会太大,也可以将read()输出保存到变量中,并在findall表达式中使用它。
附言完成操作后,不要忘记关闭文件;)
相关讨论
是的,如上所述
我只写一个例子:
|
到目前为止,回答这个问题的每个人都是绝对正确的-read()在文件中移动,因此,在您调用它之后,您将无法再次调用它。
我要补充的是,在您的特定情况下,您无需重新查找文件或重新打开文件,您只需将已阅读的文本存储在局部变量中,然后使用两次,或者在您的程序中进行任意多次:
|
相关讨论
读指针移动到最后一个读字节/字符之后。使用seek()方法将读取指针后退到开头。
每个打开的文件都有一个关联的位置。
当您读取()时,您将从该位置读取。
例如,read(10)从新打开的文件中读取前10个字节,然后另一个read(10)读取接下来的10个字节。
不带参数的read()读取文件的所有内容,将文件位置保留在文件末尾。下次调用read()时,没有任何内容可供阅读。
您可以使用seek移动文件位置。在您的情况下,可能更好的方法是做一个read()并保留两个搜索的结果。
我总是发现读取方法有点像在黑暗的小巷中漫步。您会停下来停下来,但是如果您不计算步数,则不确定您走了多远。 Seek通过重新定位来提供解决方案,另一个选项是Tell,它返回沿文件的位置。可能是Python文件api可以将读取和查找合并为一个read_from(position,bytes)以使其变得更简单-在这种情况下,您应该阅读此页面。
read()消耗。因此,您可以重设文件,或在重新读取之前寻求开始。或者,如果适合您的任务,则可以使用read(n)仅消耗n字节。