Lit*_*les 6 python memory file-writing
我有一些巨大的未排序 ID 文件,例如:
file1.txt
a1
a2
a3...etc
file2.txt
b1
a2
c1...etc
Run Code Online (Sandbox Code Playgroud)
我试图最终把它们放在一个单独的、排序的文件中。它们每个都有多个 GB,因此我无法将它们全部加载到内存中。
我当前的解决方案是根据每个 ID 的第一个字符遍历每个文件并将行保存到新文件。这将创建一个可能包含 26 个文件的目录,每个字母对应一个文件。然后,我可以稍后合并这些文件,因为每个字母的文件都可以加载到内存中。这假设 ID 的第一个字符按字母顺序均匀分布:
outputs = {}
for filename in listdir(directory):
with open(filename) as f:
for line in f:
if line[0] not in outputs:
outputs[line[0]] = open('sorted_' + line[0] + '.txt', 'w')
outputs[line[0]].write(line)
_ = [v.close() for v in outputs.itervalues()]
(then sort individually and concat the newly categorized files)
Run Code Online (Sandbox Code Playgroud)
我的问题是:新的 26 个文件中有多少内容保存在内存中?它是立即写入文件,还是仅在关闭后才真正写入?
我注意到通常如果我cat在另一个终端窗口中创建文件,它实际上并不包含您想要写入的内容,直到.close()被调用。但是它们可以保存在一个临时文件中,我不确定。
这是否只是将所有内容都保存在内存中,因此效率极低?
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |