2016-11-22 17 views
0

Ich versuche, einen Python-Skript zu schreiben, die rekursiv durch ein Verzeichnis durchlaufen wird, und erstellen Sie Dateien unterschiedlicher Größe in jedem von ihnen. Bis jetzt habe ich hier erreicht. Nun, ich habe keinen Mechanismus zum Erstellen von Dateien mit verschiedenen Größen geschrieben, aber ich brauche es. Ich weiß sehr wohl, dass etwas mit der von mir geschriebenen Dateierstellungslogik nicht stimmt. Jede Hilfe ist sehr bemerkenswert.in Verzeichnissen rekursiv in Python

Mein Code:

#!/usr/bin/python 

import os 
import uuid 

for dirs in os.walk('/home/zarvis'): 
    print dirs 
    filename = str(uuid.uuid4()) 
    size = 1000000 
    with open(filename, "wb") as f: 
    f.write(" " * size) 
+0

http://stackoverflow.com/questions/2257441/random-string- generation-with-case-letters-and-digits-in-python Hier finden Sie, wie Sie zufällige Strings generieren. Durch zufällige Auswahl des Bereichs können Sie zufällige Dateien erstellen. https://docs.python.org/2/library/random.html Ich denke, Sie können mit dieser Klasse randomisieren, was Sie wollen. –

+0

Randomizing es funktioniert, aber ich kann nicht rekursiv in allen Verzeichnissen Dateien erstellen. Das Problem liegt da. –

Antwort

1

keine feste size verwenden. Verwenden Sie random.randint, um eine zufällige Größe zu erstellen. Verwenden Sie os.path.join, um den vollständigen Pfad zu einer Datei zu erstellen.

import os 
import uuid 
import random 

for dirs in os.walk("/home/zarvis"): 
    d = dirs[0] 
    filename = str(uuid.uuid4()) 
    size = random.randint(1, 100) 
    with open(os.path.join(d, filename), "w") as f: 
     f.write(" " * size) 
+0

Mit meiner Antwort machen Sie Ihre Arbeit nicht wirklich fair ...;) –

+0

Die einfachste, die funktioniert! :) –

+2

Das ist das Problem von dem, was stackoverflow wird ... Leute wollen nicht lernen ... nur Arbeitscode ... Also ... wen kümmert es um Erklärung ... das funktioniert nur Kopieren/Einfügen .. .;) –

0

Sie verwenden os.walk in die falsche Art und Weise: mit os.walk Sie eigentlich gar nicht das Verzeichnis ändern, in dem Sie gerade arbeiten. Ihr Skript erstellt Dateien nur in dem Verzeichnis, in dem Sie es ausführen. Ich weiß nicht genau, was uuid.uuid4() tut, aber wahrscheinlich eine Lösung könnte sein, filename mit

filename = os.path.join(dirs[0], str(uuid.uuid4()) 

ersetzen Sie müssen die [0] weil os.walk Rückkehr eine Liste, in der das erste Argument das aktuelle Verzeichnis, in dem der Befehl „Gehen“ . Versuchen Sie, die Ausgabe von os.walk einmal zu drucken, um ein Gefühl damit zu bekommen.

EDIT:

Ersetzt die + mit os.path.join nach Kommentar von @LutzHorn

+0

'os.path.join' sollte anstelle von' + 'verwendet werden. –

+0

siehe https://docs.python.org/3/library/uuid.html#uuid.uuid4 –

+0

Direkt auf dem 'os.path.join' –

0

Versuchen Sie, diese

import os,uuid,random 
for root, dirs, files in os.walk("/home/zarvis/"): 
    filename = str(uuid.uuid4()) 
    size = random.randint(1, 1000000) 
    with open(os.path.join(root, filename), "wb") as f: 
     f.write(b" " * size) 
Verwandte Themen