Python“;加上;语句范围和语句顺序
好的,我的代码已经很生疏了,所以我一直在借用和修改教程 我开始玩BeautifulSoup打开一个文件:Python“;加上;语句范围和语句顺序,python,Python,好的,我的代码已经很生疏了,所以我一直在借用和修改教程 我开始玩BeautifulSoup打开一个文件: with open('event.html', encoding='utf8') as f: soup = bs4.BeautifulSoup(f, "lxml") 后来,我需要在同一个文件中找到一个字符串,而BS似乎更复杂,所以我这样做了: lines = f.readlines() 并将其与前面的说明放在一起: with open('event.html', encoding
with open('event.html', encoding='utf8') as f:
soup = bs4.BeautifulSoup(f, "lxml")
后来,我需要在同一个文件中找到一个字符串,而BS似乎更复杂,所以我这样做了:
lines = f.readlines()
并将其与前面的说明放在一起:
with open('event.html', encoding='utf8') as f:
soup = bs4.BeautifulSoup(f, "lxml")
lines = f.readlines()
我感到困惑的是,如果我交换两行,并使该块如下所示:
with open('event.html', encoding='utf8') as f:
lines = f.readlines()
soup = bs4.BeautifulSoup(f, "lxml")
然后我剩下的代码就会崩溃。为什么会这样?函数的
readlines
会使内部文件指针指向文件的末尾。我自己没有使用BeautifulSoup,但我假设他们假设输入文件指向文件中的第0个索引。
使用f.seek(0)
从一开始就查找文件应该可以减轻这一问题
with open('event.html', encoding='utf8') as f:
lines = f.readlines()
f.seek(0)
soup = bs4.BeautifulSoup(f, "lxml")
BeautifulSoup可能正在读取文件,然后在完成读取后将文件指针设置回原来的位置,这就是为什么它会以相反的方式工作。readlines函数会使内部文件指针指向文件的末尾。我自己没有使用BeautifulSoup,但我假设他们假设输入文件指向文件中的第0个索引。 使用
f.seek(0)
从一开始就查找文件应该可以减轻这一问题
with open('event.html', encoding='utf8') as f:
lines = f.readlines()
f.seek(0)
soup = bs4.BeautifulSoup(f, "lxml")
BeautifulSoup可能正在读取文件,然后在完成读取后将文件指针设置回原来的位置,这就是为什么它会以相反的方式工作。第一种方式工作,因为.readlines()将文件指针提前到文件的结尾,所以当BS尝试读取指针时,指针位于文件的结尾处,我应该使用另一种/更好的方法来提取行吗?您可以按照用户3381590的回答重置指向文件开头的指针,或者查看顺序对我来说并不重要,但我一直在绞尽脑汁想为什么代码不起作用,然后当我发现重新排序该部分“修复”它时,我更加困惑。。。如果有人有建议,我会接受第一个,因为.readlines()将文件指针推进到文件的末尾,所以当BS尝试读取指针时,指针位于文件的末尾,我应该使用另一种/更好的方法来提取行吗?您可以按照用户3381590的回答重置指向文件开头的指针,或者查看顺序对我来说并不重要,但我一直在绞尽脑汁想为什么代码不起作用,然后当我发现重新排序该部分“修复”它时,我更加困惑。。。如果有人有建议,我会从测试中得出,我相信BeautifulSoup和readlines()都不会将指针设置回原位。如果另一个先运行,BS将使脚本崩溃,但readlines()将返回空并继续。您的f.seek(0)修复了此问题。谢谢如果BS没有将指针设置回原位,那么调用f.readlines时,
行
应该是一个空列表。根据我的测试,我认为BeautifulSoup和readlines()都没有将指针设置回原位。如果另一个先运行,BS将使脚本崩溃,但readlines()将返回空并继续。您的f.seek(0)修复了此问题。谢谢如果BS没有将指针设置回原位,则调用f.readlines时,行
应为空列表。