Aufgabe war (und ist) in einer recht großen Text-Datei (200+ MB) eine vierstellige Nummer durch "0000" zu ersetzen. Also habe ich mir mit Hilfe der Python Wiki folgen Code ausgedacht:
Code: Alles auswählen
python -c "import sys,re; print re.sub('X-Mozilla-Status: [0-9]{4}','X-Mozilla-Status: 0000', sys.stdin.read())," < Inbox > null
Code: Alles auswählen
python -c "import re,sys,fileinput; [sys.stdout.write(re.sub('X-Mozilla-Status: [0-9]{4}', 'X-Mozilla-Status: 0000', line)) for line in fileinput.input('Inbox')]" > null
Die sys.stdin.read() Version arbeitet sehr zügig, verbrät aber bis zu 600MB RAM auf meinen System. Soweit nicht verwunderlich, da erst die komplette Datei gelesen und erst dann verarbeitet wird.
Die fileinput.input Version braucht auf meinem System an die 19 MB Speicher, schon besser... braucht aber auch ca. 3 mal so lange.
Nun aber endlich zum Knackpunkt: Wenn ich die fileinput.input Version statt in der Kommandozeile in einem Script ausühre,
Code: Alles auswählen
#!/usr/bin/env python
import sys,re,fileinput;
for line in fileinput.input():
print re.sub('X-Mozilla-Status: [0-9]{4}', 'X-Mozilla-Status: 0000', line),
Hab ich einen Fehler gemacht? (Denkbar, ich hab wirklich gerade erst angefangen mit Python zu arbeiten...) Gibt es eine elegantere Lösung?
Für einen kleinen Schubs in die richtige Richtung wäre ich euch mächtig dankbar,
thyrc