Python:列出目录及其子目录中的所有文件名,然后将结果打印在txt文件中

Adi*_*ous 14 python python-2.7

我的问题如下.我想列出我的目录及其子目录中的所有文件名,并将该输出打印在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)) 
Run Code Online (Sandbox Code Playgroud)

这将列出文件夹中的文件名(有6个),但每个新文件都会覆盖旧文件,因此在任何给定时间,output.txt文件中只有一个文件名.如何更改此代码以便将所有文件名写入output.txt文件?

gef*_*fei 27

不要在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) 
Run Code Online (Sandbox Code Playgroud)

或者使用上下文管理器(这是更好的做法):

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) 
Run Code Online (Sandbox Code Playgroud)

  • 你应该使用`with`语句打开一个文件,这样当循环完成时文件会自动关闭. (5认同)
  • 最好将***与***一起使用,而打开的文件将在完成整个过程后关闭.即,"打开("output.txt","w")为" (2认同)

Emm*_*ler 5

您正在以写入模式打开文件.你需要追加模式.有关详细信息,请参阅手册

更改

a = open("output.txt", "w")
Run Code Online (Sandbox Code Playgroud)

a = open("output.txt", "a")
Run Code Online (Sandbox Code Playgroud)