2024-05-26 16:27:28 发布
网友
我有两个这样的文件:
file 1 : file 2 : col1 col2 col1 col2 john kerry john kerry adam lord bob abram joe hitch
我想根据姓氏和名字比较这两个文件,只得到一个不包含文件2中人员的文件,也就是说:
我试过了,但没有得到正确的输出
如果文件格式相同,我认为您不需要csv模块。 这个解决方案怎么样:
csv
exclude_names = frozenset(open('file2')) # make set for performance with open('output', 'w') as f: for name in open('file1'): if name not in exclude_names: f.write(name)
使用csv读写器的解决方案:
results=[i for i, j in zip(reader1, reader2) if i != j]
如果顺序不重要,则使用set(reader1) - set(reader2)。在
set(reader1) - set(reader2)
我会用一个固定的差异:
with open('file1') as f1, open('file2') as f2: data1 = set(f1) lines_not_in_f2 = data1.difference(f2)
如果文件的格式可能略有不同,则可能需要将文件对象包装在生成元组的生成器中:
这样做的好处是不需要将整个f2文件读入内存。它的缺点是输出名称是无序的(因为它们存储在一个集合中)。在
如果文件格式相同,我认为您不需要
csv
模块。 这个解决方案怎么样:使用
^{pr2}$csv
读写器的解决方案:如果顺序不重要,则使用
^{pr2}$set(reader1) - set(reader2)
。在我会用一个固定的差异:
如果文件的格式可能略有不同,则可能需要将文件对象包装在生成元组的生成器中:
^{pr2}$这样做的好处是不需要将整个f2文件读入内存。它的缺点是输出名称是无序的(因为它们存储在一个集合中)。在
相关问题 更多 >
编程相关推荐