1

file1.txt3MB以上のデータを含むファイル(たとえば)があるとします。このデータを2番目のファイル(たとえば)に書き込みたい場合file2.txt、次のアプローチのどれが優れていますか?

使用言語:Python 2.7.3

アプローチ1

file1_handler = file("file1.txt", 'r')
for lines in file1_handler:
    line = lines.strip()
    # Perform some operation
    file2_handler = file("file2.txt", 'a')
    file2_handler.write(line)
    file2_handler.write('\r\n')
    file2_handler.close()
file1_handler.close()

アプローチ2

file1_handler = file("file1.txt", 'r')
file2_handler = file("file2.txt", 'a')
for lines in file1_handler:
    line = lines.strip()
    # Perform some operation
    file2_handler.write(line)
    file2_handler.write('\r\n')
file2_handler.close()
file1_handler.close()

一度開閉するだけなので、アプローチ2の方がいいと思いますfile2.txt。あなたは何を言っていますか?

4

3 に答える 3

6

を使用するwithと、ファイルが自動的に閉じられます。

with open("file1.txt", 'r') as in_file, open("file2.txt", 'a') as out_file:
    for lines in in_file:
        line = lines.strip()
        # Perform some operation
        out_file.write(line)
        out_file.write('\r\n')

,openの代わりに使用することは非推奨です。filefile

もちろん、file1 のすべての行で file2 を開くのは不合理です。

于 2013-03-20T13:16:08.850 に答える
0

私は最近似たようなことをしていました(私があなたをよく理解していれば)。どうですか:

file = open('file1.txt', 'r')
file2 = open('file2.txt', 'wt')

for line in file:
  newLine = line.strip()

  # You can do your operation here on newLine

  file2.write(newLine)
  file2.write('\r\n')

file.close()
file2.close()

このアプローチは魅力のように機能します。

于 2013-03-20T13:23:26.303 に答える
0

私の解決策(Pavel Anossov +バッファリングから派生):

dim = 1000
buffer = []
with open("file1.txt", 'r') as in_file, open("file2.txt", 'a') as out_file:
    for i, lines in enumerate(in_file):
        line = lines.strip()
        # Perform some operation
        buffer.append(line)
        if i%dim == dim-1:
            for bline in buffer:
                out_file.write(bline)
                out_file.write('\r\n')
            buffer = []

Pavel Anossov が最初に正しい解決策を示しました。これは単なる提案です ;) おそらく、この関数を実装するためのより洗練された方法が存在します。知ってる人いたら教えてください。

于 2013-03-20T13:38:55.100 に答える