2010-11-30 8 views

答えて

2

何かで十分です:

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

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

f.readlines()は、ファイル内のデータのすべての行を含むリストを返します。

行を読み取る別の方法は、ファイルオブジェクトをループすることです。これは高速で、メモリ効率的であり、そしてまた、あなたがwithキーワードの使用をチェックアウトすることができますシンプルなコード

>>> for line in f: 
     print line 

につながります。そのスイートはI種のような

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) 

メモリ

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

これはあなたが後者の場合には「が」第二の字下げする必要はありません – 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) 

それとも、すべての行を保存したくない場合を終了した後、ファイルが適切に閉じられていることを利点最初の方が良いですが、大きなファイルの場合は、ドラッグする可能性があります。

+0

完璧ですあなたが最初のケースで必要としないのと同じ理由からです。 –

+0

@Karl Knechtel私は実際にやっています。後者の場合、ジェネレータ式を使用しているので、ファイルは閉じられ、 'with'ステートメントが終了するとジェネレータ式が実際に処理されるとエラーが発生します。それを試してみてください。これは、ファイル処理でジェネレータ表現を使用するために考えることができる唯一の問題点です。 – aaronasterling

+0

ああ、そうだ。ジェネレータの存在は、ファイルを開いたままにしません。愚かな私:) –

1

私はあなたがPythonを求めていることは知っていますが、もしあなたがUNIX上にいるのなら、これはgrepの仕事です。あなたがUNIX上ではない場合

grep name file 

は、よく...答えは上記のトリックを行います:)

+0

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

+0

さらに良い! :) – John

関連する問題