我有以下代码:
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')
有一个较少使用的变量,但文件打开的时间要长得多。是否有很多数据,直接写入文件的表演是不是很糟糕?
答案 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')