2010-11-30 11 views

Antwort

2

Etwas entlang dieser Linie sollte genügen:

newfile = open(newfilename, 'w') 
for line in file(filename, 'r'): 
    if name in line: 
     newfile.write(line) 
newfile.close() 

See: http://docs.python.org/tutorial/inputoutput.html#methods-of-file-objects

f.readlines() gibt eine Liste alle Linien der Daten in der Datei enthalten.

Ein alternativer Ansatz zum Lesen von Zeilen besteht darin, das Dateiobjekt zu durchlaufen. Dies ist Speicher effizient, schnell und führt zu einfacherem Code

>>> for line in f: 
     print line 

Sie können auch die Verwendung von with Stichwort Kasse. Der Vorteil, dass die Datei ordnungsgemäß nach seiner Suite geschlossen ist beendet

>>> with open(filename, 'r') as f: 
...  read_data = f.read() 
>>> f.closed 
True 
4
with open('input.txt', 'r') as rfp: 
    with open('output.txt', 'w') as wfp: 
    for line in rfp: 
     if ilikethis(line): 
     wfp.write(line) 
+0

Dies ist ideal – pyfunc

3
with open(logfile) as f_in: 
    lines = [l for l in f_in if username in l] 
with open(outfile, 'w') as f_out: 
    f_out.writelines(lines) 

Oder wenn Sie nicht wollen, in

Speicher alle Linien speichern
with open(logfile) as f_in: 
    lines = (l for l in f_in if username in l) 
    with open(outfile, 'w') as f_out: 
     f_out.writelines(lines) 

ich ein bisschen wie der erste besser, aber für eine große Datei könnte es ziehen.

+0

Sie brauchen nicht die zweite einrücken ‚mit‘ im zweiten Fall Aus dem gleichen Grund, den Sie im ersten Fall nicht benötigen. –

+0

@Karl Knechtel tue ich eigentlich. Da ich im zweiten Fall einen Generator-Ausdruck verwende, wird die Datei geschlossen und es wird ein Fehler auftreten, wenn der Generator-Ausdruck tatsächlich verarbeitet wird, wenn die Anweisung 'with' beendet wird. Versuch es. Es ist der einzige Fehler, den ich mir vorstellen kann, wenn ich Generatorausdrücke mit der Dateiverarbeitung verwende. – aaronasterling

+0

Ah, ich verstehe. Die Existenz des Generators hält die Datei nicht offen. Dumm ich :) –

1

Ich weiß, dass Sie nach Python gefragt haben, aber wenn Sie auf Unix sind, ist dies ein Job für Grep.

grep name file 

Wenn Sie nicht auf Unix sind, gut ... die Antwort oben funktioniert der Trick :)

+0

http://gnuwin32.sourceforge.net/packages/grep.htm –

+0

noch besser! :) – John

Verwandte Themen