21

我的问题如下。我想列出我的目录及其子目录中的所有文件名,并将该输出打印在 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 文件中?

4

3 回答 3

35

不要在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) 
于 2012-08-30T14:25:41.633 回答
6

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

改变

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

a = open("output.txt", "a")
于 2012-08-30T14:25:32.820 回答
2

您可以使用以下代码仅写入文件夹中的文件名。

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) 
于 2013-03-15T08:41:46.030 回答