python - 简单的python对csv进行排序

标签 python csv

我有两个 csv 文件:一个是 98 mb,另一个是 152 kb。较小的文件是较大文件的随机子集,我想从大的 csv 中写入第三个文件,以便行对应于较小的 csv 文件中的每一行。

大文件(摘录):

ZINC_ID MWT LogP    Desolv_apolar   Desolv_polar    HBD HBA tPSA    Charge  NRB SMILES
ZINC00000017    281.337 1.33    3.07    -19.2   2   6   87  0   4   CCC[S@](=O)c1ccc2c(c1)[nH]/c(=N/C(=O)OC)/[nH]2
ZINC00000036    151.141 0.37    3.51    -45.3   1   3   60  -1  2   c1ccc(cc1)[C@@H](C(=O)[O-])O
ZINC00000048    222.24  2.42    3.78    -8.68   0   4   37  0   4   COc1cc(c(c2c1OCO2)OC)CC=C
ZINC00000053    179.151 1.43    6.59    -56.84  0   4   66  -1  3   CC(=O)Oc1ccccc1C(=O)[O-]

小文件(摘录):

SMILES
CCOc1ccc(cc1)NC(=O)C[C@@H](C)O
C[C@@H](c1ccc2c(c1)nc(o2)c3ccc(cc3)Cl)C(=O)[O-]
CC(=O)Oc1ccccc1C(=O)[O-]
COc1cc(c(c2c1OCO2)OC)CC=C

这是我的代码:

import csv

writer = csv.writer(open('/Users/Eric/Desktop/newZincSubset.csv','wb'))
count = 0
with open('/Users/Eric/Desktop/test700.csv','rU') as i:
    with open('/Users/Eric/Desktop/initial_data.csv','rU') as j:
        subject = csv.reader(i)
        reference = csv.reader(j)
        for row in subject:
            smiles = row[0]
            for reference_row in reference:
                suspect = reference_row[10]
                if (smiles == suspect):
                    writer.writerow(reference_row)

它似乎写标题很好(ZINC_ID MWT LogP)很好,但停止搜索每一行。是内存问题还是我的代码有问题?

谢谢!

最佳答案

CSV 阅读器只能迭代一次。第一次内部迭代完成后,底层文件对象到达文件末尾。一旦您第二次尝试遍历 reference 阅读器,就没有更多内容可读了。

我建议您首先将小文件读取到字典中,然后在较大的文件上迭代,以搜索与内存中数据的匹配项。您还可以根据最终要查找的内容来键入字典中的元素(我认为是 ref[10]),因此不需要嵌套循环。

关于python - 简单的python对csv进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8706896/

相关文章:

java - csv输出错误

csv - 设置 Workbook SaveAs Args (Workbook) 对象的 Text Codepage 属性

mysql 将不同的查询导出到同一工作簿中的不同工作表中

python - Ubuntu 14.04 上的 Vim 使用了一个有趣的 python 路径,python 无法在其他模块中导入 _io

python - 如何从应用程序代码访问 Gunicorn 的配置参数?

python - TensorFlow 中不同类型的划分

python - 如何使用 csv 模块为 "delimiter"提供 2 个字符?

php - Laravel Excel : CSV to Array

python - 将 pandas DataFrame 转换为列表列表

python - PyDev Eclipse Python 解释器错误 : stdlib not found