为什么我不能对打开的文件调用两次 read()?
- 2024-11-19 08:39:00
- admin 原创
- 11
问题描述:
在我正在做的一个练习中,我尝试使用该read()
方法两次读取给定文件的内容。奇怪的是,当我第二次调用它时,它似乎没有以字符串形式返回文件内容?
这是代码
f = f.open()
# get the year
match = re.search(r'Popularity in (d+)', f.read())
if match:
print match.group(1)
# get all the names
matches = re.findall(r'<td>(d+)</td><td>(w+)</td><td>(w+)</td>', f.read())
if matches:
# matches is always None
当然我知道这不是最有效或最好的方法,这不是这里的重点。重点是,为什么我不能调用read()
两次?我必须重置文件句柄吗?或者关闭/重新打开文件才能做到这一点?
解决方案 1:
调用 会read()
读取整个文件并将读取光标留在文件末尾(没有更多内容可读取)。如果您希望一次读取一定数量的行,则可以使用 readline()
,readlines()
或者使用 遍历行for line in handle:
。
直接回答您的问题,一旦读取了文件,read()
您就可以使用seek(0)
将读取的光标返回到文件的开头(文档在这里)。如果您知道文件不会太大,您还可以将输出保存read()
到变量中,并在表达式中使用它findall
。
附言:完成后请不要忘记关闭文件。
解决方案 2:
正如其他答案所建议的,您应该使用seek()
。
我只写一个例子:
>>> a = open('file.txt')
>>> a.read()
#output
>>> a.seek(0)
>>> a.read()
#same output
解决方案 3:
到目前为止回答过这个问题的每个人都是完全正确的 -read()
遍历文件,因此在你调用它之后,你就不能再调用它了。
我要补充的是,在您的特定情况下,您不需要返回到开始处或重新打开文件,您只需将读过的文本存储在局部变量中,然后在程序中使用它两次或多次:
f = f.open()
text = f.read() # read the file into a local variable
# get the year
match = re.search(r'Popularity in (d+)', text)
if match:
print match.group(1)
# get all the names
matches = re.findall(r'<td>(d+)</td><td>(w+)</td><td>(w+)</td>', text)
if matches:
# matches will now not always be None
解决方案 4:
读指针移动到最后一个读取字节/字符之后。使用seek()
方法将读指针倒回到开头。
解决方案 5:
每个打开的文件都有一个关联位置。
当您使用 read() 时,您将从该位置读取。例如,read(10)
从新打开的文件中读取前 10 个字节,然后另一个文件read(10)
读取接下来的 10 个字节。read()
不带参数的读取文件的所有内容,将文件位置留在文件末尾。下次调用时,read()
将没有任何内容可读取。
您可以使用seek
来移动文件位置。或者,对于您而言,更好的方法是执行一次搜索read()
并保留两次搜索的结果。
解决方案 6:
read()
消耗。因此,您可以重置文件,或者在重新读取之前返回read(n)
到开头。或者,如果它适合您的任务,您可以使用仅消耗n
字节。
解决方案 7:
我总是发现 read 方法有点像在黑暗的小巷里行走。你往下走一点就停下来,但如果你不计算步数,你就不知道走了多远。Seek 通过重新定位给出解决方案,另一个选项是 Tell,它返回文件的位置。也许 Python 文件 api 可以将 read 和 seek 合并为 read_from(position,bytes) 以使其更简单 - 在那之前你应该阅读此页面。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件