我有两个 CSV 文件(三列),我需要比较它们并从其他匹配的文件(五列)中提取行。文件的示例是:
文件1:
ATGCGCGACAGT, ch3, 123546
ATGCATACAGGATAT, ch2, 5141561615
......大约有 100 个条目
文件2:
ATGCGGCGACAGT,ch3, 123456,mi141515, AUCAGCUAUAUAU, UACGCAGAUAUAUA
ATCAGACGATTATGA, ch4, 4564764, mi653453, AUCAGCAAUUUUCG, AUACAGACAAAAA
....大约有 50000 个条目
我需要匹配这两个文件的列 1、2 和 3,使文件 1 的所有三列都应与文件 2 匹配。如果发生这种情况,则提取 4,5 和 6 列进行进一步处理。
我在想:
fhout=csv.writer(open('parsed_out', 'w'), delimiter=',')
for i in file1:
a=[0]
b=[1]
c=[2]
for x in file2:
d=[0]
e=[1]
f=[2]
g=[3]
h=[4]
i=[5]
if a==d and b==e and c==f:
fhout.writerow([g]+[h]+[i])
else:
pass
但有人告诉我,我可以使用散列或一些更好的方法,而不是为 file1 中的 10,000 或更多条目编写如此大的循环
请建议我实现此目标的更好方法。文件 1 和文件 2 都是从更复杂的文件中解析出来的。
最佳答案
下面按照您的建议使用集合理解为第一个文件创建哈希:
S = {tuple(line) for line in csv.reader(File1)}
然后在读取第二个文件时查找速度要快得多。
for line in csv.reader(File2):
key = tuple(line[:3])
if key in S:
print(line)
关于python - 比较 CSV 文件中列中的条目并提取匹配项 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475937/