2017-05-27 6 views
0

Ich versuche ein Python-Skript zu schreiben, das ein Verzeichnis als Eingabe nimmt und dieses Verzeichnis rekursiv durchsucht und die Dateinamen und ihre Größen in eine Datei ausgibt. Am Ende summiert es die Gesamtheit des Verzeichnisses. Die Ausgabe ist in Ordnung und passt zu dem, was ich brauche, aber alle Dateigrößen werden bei 4096 aufgelistet, wenn ich diesen Code im Verzeichnis /var ausführe. Im Folgenden finden Sie den Code ein:Rekursiv summierender Dateiinhalt

#!/usr/bin/python 
import os 

#print usage for input directory and accepts input 

print("Example: /home/cn") 
input_file = raw_input("Enter the name of the directory: ") 

#prints usage for output file and accepts input 

print("Example: /home/cn/Desktop/output_test.txt") 
output_file = raw_input("Enter the name of the output file: ") 

#opens output file for writing, sets variable for directory size to 0 

of = open(output_file, "w") 
start_path = input_file 
total_size = 0 

#loops recursively, calculates directory size 

for (path,dirs,files) in os.walk(start_path): 
    of.write(format(path)) 
    of.write(" " + str(os.path.getsize(path)) + "\n") 
    for file in files: 
     fstat=os.stat(os.path.join(path,file)) 
     size = os.stat(path).st_size 
     total_size = total_size + size 

#writes output to file 

of.write("\n" + "Directory: " + input_file + "\n") 
of.write("The total size of the directory is: " + str(total_size)) 

Und auch ein Screenshot der Ausgabedatei, wenn diese auf dem /var Verzeichnis ausgeführt wird:

/var directory output

+0

Sie tun so ziemlich was 'du' tut? Vielleicht einfach 'du' benutzen? –

+0

Sie drucken nur Verzeichnisgrößen. Die Größe eines Verzeichnisses berücksichtigt den Inhalt nicht. – user1620443

+0

Haben Sie auch bemerkt, dass Sie nur die Ergebnisse der letzten Iteration addieren? – user1620443

Antwort

1

Sie erzeugen den Dateipfad überhaupt nicht. Sie müssen den Dateinamen mit dem aktuellen Pfad verbinden, um den Dateipfad zu erhalten und erst dann die Größe der fraglichen Datei zu erhalten:

+0

in der inneren Schleife, sollte file_path, nicht full_path, gedruckt werden – user1620443

+0

Ja - das hat es gelöst. Ich danke dir sehr. – itsalittleguy

-2

Es liegt daran, dass Sie nur für Größe Wurzelpfad prüft werden.

Stattdessen versuchen Sie unter Code

for (path,dirs,files) in os.walk(start_path): 
    of.write(format(path)) 
    of.write(" " + str(os.path.getsize(path)) + "\n") 
    for dir in dirs: 
     dir_path = os.path.join(path, dir) 
     of.write(format(dir_path)) 
     of.write(" " + str(os.path.getsize(dir_path)) + "\n") 

Try this!

+0

Dies listet nicht die Dateien, sondern Verzeichnisse, so dass es nicht was OP braucht, und bekommen Größen von Verzeichnissen erhalten Sie die Größe des Verzeichnisses Aufzeichnung, nicht die Größe des Verzeichnisinhalts. Und schließlich fügst du am Ende nichts zum 'total_size' hinzu, so dass die Statistiken sowieso' 0' zurückgeben. – zwer

+0

Wurzel ist Pfad. vergiss im echten Code zu ändern. –