gpt4 book ai didi

python - 如何搜索非常大的 csv 文件?

转载 作者:行者123 更新时间:2023-11-30 22:45:08 25 4
gpt4 key购买 nike

我有 2 个 csv 文件(其中之一是 .tab),它们都有 2 列数字。我的工作是遍历第一个文件的每一行,并查看它是否与第二个文件中的任何行匹配。如果是,我会在输出 csv 文件中打印一个空行。否则,我将“R,R”打印到输出 csv 文件。我当前的算法执行以下操作:

  1. 扫描第二个文件的每一行(每行两个整数),转到二维数组中这两个整数的位置(因此,如果整数是 2 和 3,我将转到位置 [2,3])并赋值为1。
  2. 遍历第一个文件的每一行,检查每行的两个整数在数组中的位置是否为 1,然后将相应的输出打印到第三个 csv 文件。

不幸的是,csv 文件非常大,因此在运行此文件时我立即收到“MemoryError:”。扫描大型 csv 文件的替代方法是什么?

我正在使用 Jupyter Notebook。我的代码:

import csv
import numpy

def SNP():
thelines = numpy.ndarray((6639,524525))
tempint = 0
tempint2 = 0
with open("SL05_AO_RO.tab") as tsv:
for line in csv.reader(tsv, dialect="excel-tab"):
tempint = int(line[0])
tempint2 = int(line[1])
thelines[tempint,tempint2] = 1
return thelines

def common_sites():
tempint = 0
tempint2 = 0
temparray = SNP()
print('Checkpoint.')
with open('output_SL05.csv', 'w', newline='') as fp:
with open("covbreadth_common_sites.csv") as tsv:
for line in csv.reader(tsv, dialect="excel-tab"):
tempint = int(line[0])
tempint2 = int(line[1])
if temparray[tempint,tempint2] == 1:
a = csv.writer(fp, delimiter=',')
data = [['','']]
a.writerows(data)
else:
a = csv.writer(fp, delimiter=',')
data = [['R','R']]
a.writerows(data)
print('Done.')
return

common_sites()

文件: https://drive.google.com/file/d/0B5v-nJeoVouHUjlJelZtV01KWFU/view?usp=sharinghttps://drive.google.com/file/d/0B5v-nJeoVouHSDI4a2hQWEh3S3c/view?usp=sharing

最佳答案

您的数据集确实没有那么大,但相对稀疏。您没有使用稀疏结构来存储导致问题的数据。
只需使用元组集合来存储看到的数据,然后对该集合的查找是O(1),例如:

In [1]:
import csv
with open("SL05_AO_RO.tab") as tsv:
seen = set(map(tuple, csv.reader(tsv, dialect="excel-tab")))
with open("covbreadth_common_sites.csv") as tsv:
common = [line for line in csv.reader(tsv, dialect="excel-tab") if tuple(line) in seen]
common[:10]
Out[1]:
[['1049', '7280'], ['1073', '39198'], ['1073', '39218'], ['1073', '39224'], ['1073', '39233'],
['1098', '661'], ['1098', '841'], ['1103', '15100'], ['1103', '15107'], ['1103', '28210']]

10 loops, best of 3: 150 ms per loop

In [2]:
len(common), len(seen)
Out[2]:
(190, 138205)

关于python - 如何搜索非常大的 csv 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41292687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com