Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python“;加上;语句范围和语句顺序_Python - Fatal编程技术网

Python“;加上;语句范围和语句顺序

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

好的,我的代码已经很生疏了,所以我一直在借用和修改教程

我开始玩BeautifulSoup打开一个文件:

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时,
应为空列表。