在python中读取/写入文件的更好方法?

时间:2013-03-20 13:13:23

标签: python file-handling

假设我有一个文件(比如file1.txt),数据大约为3mb或更多。如果我想将这些数据写入第二个文件(比如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()

我认为方法二会更好,因为你只需要打开和关闭file2.txt一次。你怎么说?

3 个答案:

答案 0 :(得分: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代替file,不推荐使用file

当然,在file1的每一行上打开file2都是不合理的。

答案 1 :(得分: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()

这种做法就像一个魅力!

答案 2 :(得分: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首先给出了正确的解决方案:这只是一个建议;) 可能它存在一种更优雅的方式来实现这个功能。如果有人知道,请告诉我们。