首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较csv文件的等级顺序

比较csv文件的等级顺序
EN

Stack Overflow用户
提问于 2016-06-06 22:15:45
回答 1查看 184关注 0票数 0

我试图比较一个csv文件的前300行和另一个。我正在迭代第一个文件的每一行。在该迭代中,我将遍历第二个文件,计数每个迭代,直到找到匹配的。然后,我将计数值(第二个文件中匹配行的行)输出到文本文件中。

以下是我到目前为止所拥有的:

代码语言:javascript
复制
    import csv

with open('/Volumes/cachannel/CUTLER/subsampling/in-silico_IDC18_GFP18_names_only.csv', 'rb') as file1:
    file1reader = csv.reader(file1)
    with open('/Volumes/cachannel/CUTLER/subsampling/ICD18_GFP18_names_only.csv', 'rb') as file2:
        file2reader = csv.reader(file2)

        header1 = file1reader.next()
        header2 = file2reader.next()

        count = 0

        with open("Rank_results.txt", 'a') as outfile:
            while count < 300:
                print(count)
                for line1 in file1reader:
                    linenum = 1
                    for line2 in file2reader:
                        if line1 == line2:
                            print('match found')
                            outfile.write(str(linenum))
                        else:
                            linenum += 1
                count += 1

我现在遇到的错误是,当我知道还有更多的时候,它只找到第一次匹配,而没有找到任何其他匹配。

为了澄清这一点,举个例子:

档案1:

代码语言:javascript
复制
Bob
Sue 
Sally
Herald

档案2:

代码语言:javascript
复制
Sue 
Bob 
Herald 
Sally

输出文件:

代码语言:javascript
复制
2 1 4 3
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-06 23:54:50

您的主要问题是尝试多次迭代第二个文件。为了多次遍历整个内容,您需要关闭并重新打开它。您还可以让Python通过使用enumerate()自动计数行号,并通过将它们存储在列表中并检查其长度来计数匹配数。

另一个问题是示例输入文件中没有头行。假设它们包含它们,下面的操作应该是您想要的:

代码语言:javascript
复制
import csv

MAX_COUNT = 300
filename1 = '/Volumes/cachannel/CUTLER/subsampling/in-silico_IDC18_GFP18_names_only.csv'
filename2 = '/Volumes/cachannel/CUTLER/subsampling/ICD18_GFP18_names_only.csv'
matches = []

with open(filename1, 'rb') as file1:
    file1reader = csv.reader(file1)
    header1 = file1reader.next()

    for line1 in file1reader:
        with open(filename2, 'rb') as file2:
            file2reader = csv.reader(file2)
            header2 = file2reader.next()

            for linenum, line2 in enumerate(file2reader, start=1):
                if line1 == line2:
                    print('match found')
                    matches.append(str(linenum))
                    if len(matches) >= MAX_COUNT:
                        break

        if len(matches) >= MAX_COUNT:
            break

with open("Rank_results.txt", 'w') as outfile:
    outfile.write(' '.join(matches) + '\n')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37667696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档