大型CSV文件中独立列的部分相交

2024-09-28 20:47:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,根据每个文件中两个特定列的内容来查找大型csv文件之间的交集,这两个列分别是:Query ID和Subject ID

对于每个物种,一组文件是左右成对的,每个文件看起来如下:

Similarity (%)  Query ID    Subject ID
100.000000  BRADI5G01462.1_1    BRADI5G16060.1_36
90.000000   BRADI5G02480.1_5    NCRNA_11838_6689
100.000000  BRADI5G06067.1_8    NCRNA_32597_1525
90.000000   BRADI5G08380.1_12   NCRNA_32405_1776
100.000000  BRADI5G09460.2_17   BRADI5G16060.1_36
90.909091   BRADI5G10680.1_20   NCRNA_2505_6156

右边的文件总是比左边的文件长且大!!在

以下是我目前掌握的代码片段:

^{pr2}$

上面的代码模拟迭代两个文件的记录,搜索第(1)行、第一个文件的第(2)行、第二个文件的第(2)行的内容,即按列(比较两个文件中的查询ID和主题ID),并按一定的顺序在新文件上打印匹配项。在

结果并不完全是我所期望的;显然它只找到第一个想要的列的匹配项。。。我试图手动追溯过程,发现BRADI5G02480.1_5在两个文件中都存在,但不存在{},它只存在于左侧而不存在于右侧!!在

它们不应该是数字反射吗?!在

我使用了this线程来编写脚本,但是它逐行比较,并且不检查列内容的其余部分是否匹配。在

另外,我找到了this,但它使用的字典和列表不适合我的文件大小。在

为了处理模拟迭代的事情,我使用了this线程,但是这里提到的关于处理可变大小文件的内容我并不清楚,所以我还没有尝试过!!在

如果有人能告诉我这里缺少什么,代码是正确的还是我使用的in条件错误,我将非常感激?!在

拜托,我真的需要帮助。。。提前感谢:)


Tags: 文件csv代码脚本id内容物种记录
1条回答
网友
1楼 · 发布于 2024-09-28 20:47:45

下面的解决方案是我对你的另一个问题的回答的副本,希望能让你知道如何将它与你当前的解决方案相结合。在

该脚本在中读取两个(或更多)CSV文件,并将行条目的交集写入新的CSV文件。我的意思是,如果input1.csv中的row1在input2.csv中的任何地方找到,则该行将写入输出,依此类推。在

import csv

files = ["input1.csv", "input2.csv"]
ldata = []

for file in files:
    with open(file, "r") as f_input:
        csv_input = csv.reader(f_input, delimiter="\t", skipinitialspace=True)
        set_rows = set()
        for row in csv_input:
            set_rows.add(tuple(row))
        ldata.append(set_rows)

with open("Intersection(Brachypodium_Japonica).csv", "wb") as f_output:
    csv_output = csv.writer(f_output, delimiter="\t", skipinitialspace=True)
    csv_output.writerows(set.intersection(*ldata))

您需要添加文件名mangling。这种格式使测试更容易。使用Python2.7进行了测试。在

相关问题 更多 >