python - una - remover varios archivos linux
¿Cómo ir recursivamente por todos los subdirectorios y leer archivos? (2)
Necesita usar rutas absolutas, su variable de file
es solo un nombre de archivo local sin una ruta de directorio. La variable root
es esa ruta:
with open(''output.txt'',''w'') as fout:
for root, subFolders, files in os.walk(rootdir):
if ''data.txt'' in files:
with open(os.path.join(root, ''data.txt''), ''r'') as fin:
for lines in fin:
dosomething()
Tengo un directorio raíz que contiene múltiples subdirectorios, todos los cuales contienen un nombre de archivo data.txt. Lo que me gustaría hacer es escribir una secuencia de comandos que tome en el directorio "raíz", y luego lea todos los subdirectorios y lea cada "data.txt" en los subdirectorios, y luego escriba cosas de cada archivo data.txt para un archivo de salida.
Aquí hay un fragmento de mi código:
import os
import sys
rootdir = sys.argv[1]
with open(''output.txt'',''w'') as fout:
for root, subFolders, files in os.walk(rootdir):
for file in files:
if (file == ''data.txt''):
#print file
with open(file,''r'') as fin:
for lines in fin:
dosomething()
Mi parte dosomething (): la probé y confirmé para que funcione si estoy ejecutando esa parte solo para un archivo. También confirmé que si le digo que imprima el archivo (la línea comentada), el script imprime ''data.txt''.
Ahora mismo si lo ejecuto, Python me da este error:
File "recursive.py", line 11, in <module>
with open(file,''r'') as fin:
IOError: [Errno 2] No such file or directory: ''data.txt''
No estoy seguro de por qué no puede encontrarlo. Después de todo, imprime data.txt si elimino el comentario de la línea ''imprimir archivo''. ¿Qué estoy haciendo incorrectamente?
[os.path.join(dirpath, filename) for dirpath, dirnames, filenames in os.walk(rootdir)
for filename in filenames]
Un enfoque funcional para obtener el árbol se ve más corto, más limpio y más Pythonic.
Puede envolver el os.path.join(dirpath, filename)
en cualquier función para procesar los archivos que obtiene o guardar el conjunto de rutas para su posterior procesamiento