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

我有一个包含数千个文件的文件夹。我正在尝试使用 beautifulsoup4 解析其中的 XML 标签。


我可以单独为每个文件执行此操作,但无法使用 for 循环使我的脚本工作。


到目前为止,这是我的代码:


import bs4 as bs

import glob



path = 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

我怀疑这是范围问题,但无法修复。有什么建议么?谢谢


翻阅古今
浏览 1571回答 2
2回答

POPMUISE

您可以在同一循环中简单地读取文件,然后写入文件。for f in files:&nbsp; &nbsp; source = open(f, "w+")&nbsp; &nbsp; soup = bs.BeautifulSoup(source, "lxml")&nbsp; &nbsp; soupText = soup.get_text()&nbsp; &nbsp; text = soupText.replace(r"\n", " ")&nbsp; &nbsp; source.write(text)&nbsp; &nbsp; source.close()

慕容708150

请注意,它text是在第一个 for 循环内定义的。如果files是空列表,则text永远不会被定义。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python