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 ファイルには常に 1 つのファイル名しかありません。このコードを変更して、すべてのファイル名を 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 に答える