Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
csv上的简单python排序_Python_Csv - Fatal编程技术网

csv上的简单python排序

csv上的简单python排序,python,csv,Python,Csv,我有两个csv文件:一个是98 mb,另一个是152 kb。较小的文件是较大文件的随机子集,我想从较大的csv中写入第三个文件,这样行对应于较小的csv文件中的每一行 大文件(节选): 小文件(节选): 这是我的密码: import csv writer = csv.writer(open('/Users/Eric/Desktop/newZincSubset.csv','wb')) count = 0 with open('/Users/Eric/Desktop/test700.csv','r

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

大文件(节选):

小文件(节选):

这是我的密码:

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)
它似乎可以很好地写入标题(zing_ID MWT LogP),但是停止搜索每一行。这是内存问题还是我的代码有问题


谢谢

CSV读取器只能迭代一次。第一次内部迭代完成后,底层文件对象到达文件的末尾。一旦您第二次尝试迭代
参考
读取器,就没有什么可读的了


我建议您首先将小文件读入字典,然后在较大的文件上迭代,根据内存中的数据搜索匹配项。您还可以根据最终要查找的内容在字典中键入元素(我想是参考文献[10]),这样就不需要嵌套循环。

CSV阅读器只需迭代一次。第一次内部迭代完成后,底层文件对象到达文件的末尾。一旦您第二次尝试迭代
参考
读取器,就没有什么可读的了

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

一个实现(使用
DictReader
DictWriter
,以利用标题):

实现(使用
DictReader
DictWriter
,以利用标题):


标题是
锌ID MWT LogP
还是整行?锌ID MWT LogP Desolv\u apolar Desolv\u polar HBD HBA tPSA Charge NRB SMILES是标题。标题是
锌ID MWT LogP
还是整行?锌ID MWT LogP Desolv\u apolar Desolv\u polar HBD HBA tPSA Charge NRB SMILES是标题。他可以读取标题sample(非常小)一次,将其存储在内存中,然后在big(避免抓取一大块RAM)+1中的每一行对其进行迭代,以确定问题,尽管我实际上建议只将小文件读入内存,并从其行中构建一个
集。然后,您仍然可以在大文件上迭代并处理它,而不必将整个内容加载到内存中。我已经更新了最后一段。。实际上,我建议设置一个
dict
而不是
set
,因为他可以使用该键高效地查找他所加入的属性。@samet:a
set
也可以高效地查找:),并且不需要为每个键添加空值!thansk,我将较小的文件加载到内存中,然后使用“for iterable in bigfile:”循环加载到较小内存中的文件中的每一行。他只需读取一次样本(非常小),将其存储在内存中,然后在大内存中每一行迭代一次(避免抓取一大块RAM)+1即可确定问题,尽管我实际上建议只将小文件读入内存,并在其行之外构建一个
集。然后,您仍然可以在大文件上迭代并处理它,而不必将整个内容加载到内存中。我已经更新了最后一段。。实际上,我建议设置一个
dict
而不是
set
,因为他可以使用该键高效地查找他所加入的属性。@samet:a
set
也可以高效地查找:),并且不需要为每个键添加空值!thansk,我将较小的文件加载到内存中,然后使用“for iterable in bigfile:”循环加载到较小内存中的文件中的每一行。注意:刚刚编辑代码,使其使用制表符作为分隔符(似乎示例中正在使用的内容)。注意:刚刚编辑代码,使其使用制表符作为分隔符(似乎示例中使用了什么)
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)
import csv

with open('sample.csv','rU') as i: 
    smiles = set(x['SMILES'] for x in csv.DictReader(i))

with open('init.csv','rU') as j:
    reference = csv.DictReader(j, delimiter = '\t')
    fields = reference.fieldnames
    writer = csv.DictWriter(open('newZincSubset.csv','wb'),
                            fields,
                            delimiter = '\t')
    writer.writerow(dict((x,x) for x in fields))
    for reference_row in reference:
        if reference_row['SMILES'] in smiles:
            writer.writerow(reference_row)