【发布时间】:2015-10-02 23:08:37
【问题描述】:
所以我有两张非常大的表要比较(9 列和大约 3000 万行)。
#!/usr/bin/python
import sys
import csv
def compare(sam1, sam2, output):
with open(sam1, "r") as s1, open(sam2, "r") as s2, open(output, "w") as out:
reader1 = csv.reader(s1, delimiter = "\t")
reader2 = csv.reader(s2, delimiter = "\t")
writer = csv.writer(out, delimiter = "\t")
list = []
for line in reader1:
list.append(line[0])
list = set(list)
for line in reader2:
for field in line:
if field not in list:
writer.writerow(line)
if __name__ == '__main__':
compare(sys.argv[1], sys.argv[2], sys.argv[3])
第一列包含我的行的标识符,我想知道哪些只在 sam1 中。
所以这是我目前正在使用的代码,但它需要很长时间。有什么办法可以加快速度吗?
我已经尝试通过将列表转换为集合来加快速度,但没有太大区别。
编辑:现在它运行得更快了,但现在我必须从输入表中取出整行并将具有独占 ID 的行写入输出文件。我怎样才能快速解决这个问题?
【问题讨论】:
-
只是一个顶级想法,快速通读文件以创建包含每个文件第一行的两组。查找 (setA - setB) 以获取仅存在于 setA 中的行
-
我想过这个,但我不知道如何快速实现它。
-
无论如何您都必须阅读整个文件。使用 set 而不是 list 只会让它更快一点。
标签: python arrays python-2.7 csv