2012-08-30 16 views
11

Sorunum aşağıdaki gibidir. Dizindeki ve alt dizinlerindeki tüm dosya adlarını listelemek ve bu çıktıyı bir txt dosyasına yazdırmak istiyorum. Şimdi bu var bugüne kadar kodudur:Python: Bir dizindeki ve alt dizinlerindeki tüm dosya adlarını listeler ve sonuçları bir txt dosyasına yazdı

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

Bu klasörlerde dosyaların isimlerini listeler (6 vardır) ama her yeni dosya eski böylece çıktıda yalnızca bir dosya adı vardır üzerine yazar. herhangi bir zamanda txt dosyası. Bu kodu, tüm dosya adlarını output.txt dosyasında yazacak şekilde nasıl değiştiririm?

+3

'open' ifadesini döngülerin dışına taşıyın. – mgilson

+0

SO aradınız mı? Sadece bir süre önce bunun neredeyse bir kopyasını okuyordum ... –

cevap

24

sizin for döngüde bir dosyayı açmayın. senin for döngü önce açmak bu

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) 

Veya bir bağlam yöneticisi (daha iyi uygulamadır) kullanmak gibi

: sadece gelen dosya adı Yazman gereken kodunun altına kullanabilirsiniz

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

Ve 'with' deyimini kullanarak bir dosya açıyor olmalısınız, böylece dosyalar döngüler bittiğinde otomatik olarak kapanacaktır. –

+2

*** ile *** kullanmak daha iyidir, açılan dosya işlemi tamamladıktan sonra kapatılacaktır. Yani, "açık (" output.txt "," w ") ile bir" –

+0

@brain buck, – gefei

5

Dosyayı yazma modunda açıyorsunuz. Ekleme moduna ihtiyacın var. Detaylar için manual'a bakın.

değişiklik

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

için
a = open("output.txt", "a") 
2

Klasör.

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) 
İlgili konular