2010-11-30 22 views

Répondre

2

Quelque chose le long de cette ligne devrait suffire:

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

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

f.readlines() retourne une liste contenant toutes les lignes de données dans le fichier.

Une approche alternative à la lecture des lignes consiste à faire une boucle sur l'objet fichier. Cette mémoire est efficace, rapide et conduit à un code plus simple

>>> for line in f: 
     print line 

vous pouvez également l'utilisation de la caisse mot-clé with. L'avantage que le fichier est correctement fermé après sa suite se termine

>>> 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

C'est parfait – 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) 

Ou si vous ne voulez pas stocker toutes les lignes en mémoire

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) 

Je peu comme le premier mieux mais pour un gros fichier, il pourrait glisser.

+0

Vous n'avez pas besoin de retrait de la deuxième « avec » dans le second cas , pour la même raison que vous n'avez pas besoin dans le premier cas. –

+0

@Karl Knechtel Je fais réellement. Parce que dans le second cas j'utilise une expression de générateur, le fichier sera fermé et cela provoquera une erreur quand l'expression de générateur sera réellement traitée si l'instruction 'with' se termine. Essayez-le. C'est la seule chose à laquelle je peux penser pour utiliser des expressions de générateurs avec le traitement de fichiers. – aaronasterling

+0

Ah, je vois. L'existence du générateur ne gardera pas le fichier ouvert. Idiote moi :) –

1

Je sais que vous avez demandé Python, mais si vous êtes sous Unix c'est un travail pour grep.

grep name file 

Si vous n'êtes pas sur unix, eh bien ... la réponse ci-dessus l'affaire :)

+0

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

+0

encore mieux! :) – John