Python – beautifulsoup, aplicar en cada archivo de texto en la carpeta y producir nuevo archivo de texto

Estoy usando el siguiente código de Python – Beautifulsoup para eliminar elementos html de un archivo de texto:

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')) 

La pregunta que tengo es cómo puedo aplicar este código a cada archivo de texto en una carpeta (directorio), y para cada archivo de texto producir un nuevo archivo de texto que se procesa y donde se eliminan los elementos html, etc., sin tener que llamar al función para cada archivo de texto?

Dejaría ese trabajo para el sistema operativo, simplemente reemplazaría el archivo de entrada codificado con la entrada de una fuente externa, en argv array, e invocaría el script dentro de un bucle o con una expresión regular que coincida con muchos archivos, como:

 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')) 

Y ejecutarlo como:

 python script.py *.txt 

El módulo glob le permite listar todos los archivos en un directorio:

 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')) 

Si también quieres hacer eso para cada subcarpeta recursivamente, echa un vistazo a os.walk