Python Datei einer bestimmten Größe erstellen (schnellster Weg)

Phuesick

Cadet 2nd Year
Registriert
Jan. 2016
Beiträge
29
Hallo Community :),

ich habe mich vor kurzem an Python gewagt und wollte ein Script schreiben, dass Dateien einer bestimmten Größe erstellt.
So sieht das Ding aus:

Code:
n = int(input('How many MB?: ')) # fragt wie viel MB
f = open(str(n) + 'MB_file', 'w') # erstellt Datei
print('Writing ' + str(n) + 'MB file...') # Info-Message
for i in range(n): # pro Schleife +1 MB
    print('Working... [' + str(int((i+1)/n*100)) + '%]', end='\r') # gibt Fortschritt aus
    f.write('A'*1048576) # = 1mb
input('\nDone! Press\'ENTER\' to exit.')

Ich habe mir gedacht, dass 1048576 Buchstaben genau 1MB ergeben (1 Buchstabe = 1Byte * 1024 * 1024)
Es hat auch alles super geklappt, nur bin ich mir nicht sicher ob es schnellere Methoden gibt.

2 GB schreibt das Script in 20s

Mit freundlichen Grüßen, Phuesick :)
 
Zuletzt bearbeitet:
Was ich kurz ausprobiert habe:

Code:
file = open("myfile", "w")
file.seek(1024 * 1024 * 1024 - 1)
file.write('\0')
file.flush()

Erzeugt mir eine 1GB Datei. Ich bin mir aber gerade nicht sicher, ob da tatsächlich 1GB geschrieben wurden, oder ob das nur eine "virtuelle" Datei ist.
 
Du kannst den Durchsatz erhöhen, indem du beispielsweise 8mb auf einmal schreibst statt 1mb. Dieselbe Funktionalität, wie dein Python Skript, bietet auch das open source Programm "GNU dd". Dieses ist zwar in C geschrieben, aber du kannst dir ja mal den Quellcode anschauen und nachsehen, wie es dort gemacht wird.
 
Phuesick schrieb:
Code:
    f.write('A'*1048576) # = 1mb
bin kein python wizard, aber vermutlich kriegst du ein paar millisekunden raus, indem du das generieren deines blockes ausserhalb der schleife erledigst und ihn dann einfach nur x-mal schreibst.

2GB in 20 sekunden klingt aber schon relativ fix (fuer eine HDD).
 
Zurück
Oben