2012-08-30 15 views
11

Mi problema es el siguiente. Quiero enumerar todos los nombres de archivo en mi directorio y sus subdirectorios y tener ese resultado impreso en un archivo txt. Ahora bien, este es el código que tengo hasta ahora:Python: enumere todos los nombres de archivo en un directorio y sus subdirectorios y luego imprima los resultados en un archivo de texto

import os 

for path, subdirs, files in os.walk('\Users\user\Desktop\Test_Py'): 
    for filename in files: 
    f = os.path.join(path, filename) 
    a = open("output.txt", "w") 
    a.write(str(f)) 

Esta lista los nombres de los archivos de las carpetas (hay 6), pero cada nuevo archivo sobrescribe el viejo por lo que no es sólo un nombre de archivo en la salida. archivo txt en cualquier momento dado. ¿Cómo cambio este código para que escriba todos los nombres de los archivos en el archivo output.txt?

+3

Mueva la declaración 'open' fuera de los bucles. – mgilson

+0

¿Buscó SO? Estaba leyendo casi un duplicado exacto de esto desde hace un tiempo ... –

Respuesta

24

recomienda no abrir un archivo en su bucle for. abra antes de su bucle for

como esto

import os 

a = open("output.txt", "w") 
for path, subdirs, files in os.walk(r'C:\Users\user\Desktop\Test_Py'): 
    for filename in files: 
    f = os.path.join(path, filename) 
    a.write(str(f) + os.linesep) 

o utilizando un gestor de contexto (que es mejor la práctica):

import os 

with open("output.txt", "w") as a: 
    for path, subdirs, files in os.walk(r'C:\Users\user\Desktop\Test_Py'): 
     for filename in files: 
     f = os.path.join(path, filename) 
     a.write(str(f) + os.linesep) 
+5

Y debe abrir un archivo con la instrucción 'with' para que el archivo se cierre automáticamente cuando finalicen los bucles. –

+2

es mejor usar *** con *** mientras que el archivo abierto se cerrará después de completar el proceso. es decir, "con open (" output.txt "," w ") como" –

+0

@brain buck, gracias por editar – gefei

5

Está abriendo el archivo en modo de escritura. Necesitas modo de agregar. Vea el manual para más detalles.

cambio

a = open("output.txt", "w") 

a

a = open("output.txt", "a") 
2

Puede utilizar a continuación código para escribir archivo de sólo el nombre de una carpeta.

import os 

a = open("output.txt", "w") 
for path, subdirs, files in os.walk(r'C:\temp'): 
    for filename in files: 
     a.write(filename + os.linesep) 
Cuestiones relacionadas