Python: список всех имен файлов в каталоге и его подкаталогах, а затем распечатать результаты в файле txt

Моя проблема заключается в следующем. Я хочу перечислить все имена файлов в моем каталоге и его подкаталогах и получить этот вывод, напечатанный в txt файле. Теперь это код, который у меня есть до сих пор:

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

Здесь перечислены имена файлов в папках (их 6), но каждый новый файл перезаписывает старое, поэтому в файле output.txt есть только одно имя файла в любой момент времени. Как изменить этот код, чтобы он записывал все имена файлов в файле output.txt?

Ответ 1

не открывайте файл в цикле for. откройте его перед циклом for

как это

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) 

Или используя диспетчер контекста (который лучше подходит):

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) 

Ответ 2

Вы открываете файл в режиме записи. Вам нужен режим добавления. Подробнее см. В руководстве.

изменение

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

в

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

Ответ 3

Вы можете использовать нижеприведенный код для записи только имени файла из папки.

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)