写入变量然后写入文件或直接写入文件?

时间:2017-01-13 11:01:38

标签: python python-2.7

我有以下代码:

foo = json.loads(get_foo())

foo_file = ''
for f in foo['datas']:
    foo_file += f['bar'] + ' ' + f['barfoo'] + '\n'

with open(output, 'w') as output:
    output.write(foo_file)

这是正确的方法,还是应该像这样直接写入文件:

foo = json.loads(get_foo())

with open(output, 'w') as output:
    for f in foo['datas']:
        output.write(f['bar'] + ' ' + f['barfoo'] + '\n')

有一个较少使用的变量,但文件打开的时间要长得多。是否有很多数据,直接写入文件的表演是不是很糟糕?

4 个答案:

答案 0 :(得分:1)

通常当您直接(在代码中)写入文件时,系统不会立即写入文件:它将使用有关缓冲的操作系统(OS)策略:在内部,它首先存储在内存中,只有当要写入的内容量超过某个阈值时,才会将其写入文件。

使用open时,您还可以指定buffering

但回到你的问题:我认为性能差异不会那么大,而且并不总是可以先将所有内容存储在变量中:假设你要写一个{{1}文件,你无法将内容完全存储在内存中。

最后请注意,最好使用1 TiB和字符串格式来提高字符串构造的效率。这样:

.join

可以替换为:

foo_file = ''
for f in foo['datas']:
    foo_file += f['bar'] + ' ' + f['barfoo'] + '\n'

答案 1 :(得分:1)

在这里使用writelines,python可以选择最佳方式。

foo = json.loads(get_foo())

with open(output, 'w') as output:
    output.writelines(
        '{} {}\n'.format(f['bar'],f['barfoo'])
        for f in foo['datas']
    )

答案 2 :(得分:0)

我认为假设你的f()相对较快,我认为这并没什么区别。要么没事。它可能取决于你需要它,如果你需要稍后获取数据,那么选项1更好,否则选项2有点整洁。

答案 3 :(得分:0)

性能应与写入缓冲文件大致相同。

你也可以这样做:

foo = json.loads(get_foo())

with open(output, 'w') as output:
    for f in foo['datas']:
        output.write(f['bar'] + ' ' + f['barfoo'] + '\n')