Python-beautifulsoup, применить в каждом текстовом файле в папке и создать новый текстовый файл



Я использую следующий код Python - Beautifulsoup для удаления html-элементов из текстового файла:



from bs4 import BeautifulSoup

with open("textFileWithHtml.txt") as markup:
soup = BeautifulSoup(markup.read())

with open("strip_textFileWithHtml.txt", "w") as f:
f.write(soup.get_text().encode('utf-8'))


Вопрос, который у меня есть, заключается в том, как я могу применить этот код к каждому текстовому файлу в папке(каталоге), и для каждого текстового файла создать новый текстовый файл, который обрабатывается и где элементы html и т. д. удаляются, не вызывая функцию для каждого текстового файла?

597   2  

2 ответов:

Я бы оставил эту работу ОС, просто заменил жестко закодированный входной файл на вход из внешнего источника, в массиве argv, и вызвал скрипт внутри цикла или с регулярным выражением, которое соответствует многим файлам, например:

from bs4 import BeautifulSoup
import sys

for fi in sys.argv[1:]:
    with open(fi) as markup:
        soup = BeautifulSoup(markup.read())

    with open("strip_" + fi, "w") as f: 
        f.write(soup.get_text().encode('utf-8'))

И запустить его следующим образом:

python script.py *.txt

Модульglob позволяет перечислить все файлы в каталоге:

import glob
for path in glob.glob('*.txt'):
    with open(path) as markup:
        soup = BeautifulSoup(markup.read())

    with open("strip_" + path, "w") as f: 
        f.write(soup.get_text().encode('utf-8'))

Если вы хотите также сделать это для каждой подпапки рекурсивно, проверьте os.прогулка

Comments

    Ничего не найдено.