为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用python和bs4读取并覆盖文件夹中的所有*.txt文件?

如何使用python和bs4读取并覆盖文件夹中的所有*.txt文件?

翻阅古今 2023-08-22 14:52:00
我有一个包含数千个文件的文件夹。我正在尝试使用 beautifulsoup4 解析其中的 XML 标签。我可以单独为每个文件执行此操作,但无法使用 for 循环使我的脚本工作。到目前为止,这是我的代码:import bs4 as bsimport globpath = r"~/Desktop/pythontest/*.txt"files = glob.glob(path)# ------------------------READ AND PARSE TEXT-----------------------------------------for f in files:    # open file in read mode    source = open(f, "rt")    # parse xml as soup    soup = bs.BeautifulSoup(source, "lxml")    soupText = soup.get_text()    text = soupText.replace(r"\n", " ")    # close file    source.close()# --------------------------OVERWRITE FILE---------------------------------------------for f in files:    # open file in write mode    source = open(f, "wt")    # overwrite the file with the soup    source.write((text))    # # close file    source.close()print(text)当我运行它时,控制台给我这个:Traceback (most recent call last):  File "./camltest.py", line 34, in <module>    print(text)NameError: name 'text' is not defined我怀疑这是范围问题,但无法修复。有什么建议么?谢谢
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

您可以在同一循环中简单地读取文件,然后写入文件。


for f in files:

    source = open(f, "w+")

    soup = bs.BeautifulSoup(source, "lxml")

    soupText = soup.get_text()

    text = soupText.replace(r"\n", " ")

    source.write(text)

    source.close()


查看完整回答
反对 回复 2023-08-22
?
慕容708150

TA贡献1831条经验 获得超4个赞

请注意,它text是在第一个 for 循环内定义的。

如果files是空列表,则text永远不会被定义。


查看完整回答
反对 回复 2023-08-22
  • 2 回答
  • 0 关注
  • 1571 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信