我正在解析两个大文件(GB 大小顺序),每个文件包含keys
以及对应的values
. Some keys
在两个文件之间共享,但对应的不同values
。
对于每个文件,我想写入一个新文件keys*
以及对应的values
, with keys*
代表 file1 和 file2 中都存在的键。我不在乎key
输出中的顺序,但两个文件中的顺序绝对应该相同。
File 1:
key1
value1-1
key2
value1-2
key3
value1-3
File2:
key1
value2-1
key5
value2-5
key2
value2-2
有效的输出将是:
解析文件1:
key1
value1-1
key2
value1-2
解析文件2:
key1
value2-1
key2
value2-2
另一个有效的输出:
解析文件1:
key2
value1-2
key1
value1-1
解析文件2:
key2
value2-2
key1
value2-1
An invalid输出(文件 1 和文件 2 中的键顺序不同):
解析文件1:
key2
value1-2
key1
value1-1
解析文件2:
key1
value2-1
key2
value2-2
最后一个精度是值的大小远远大于键的大小。
我想做的是:
对于每个输入文件,解析并返回一个dict
(我们称之为file_index
),其中的键对应于文件中的键,值对应于在输入文件中找到该键的偏移量。
-
计算交集
good_keys = file1_index.viewkeys() & file2_index.viewkeys()
-
做类似(伪代码)的事情:
for each file:
for good_key in good_keys:
offset = file_index[good_key]
go to offset in input_file
get corresponding value
write (key, value) to output file
迭代同一个集合是否能保证我具有完全相同的顺序(前提是它is相同的集合:我不会在两次迭代之间修改它),或者我应该先将集合转换为列表,然后迭代列表?