通过循环比较2 .csv文件

时间:2017-05-16 00:56:25

标签: python csv

我有15个.csv个文件,格式如下:

**File 1**
MYC
RASSF1
DAPK1
MDM2
TP53
E2F1
...

**File 2**
K06227
C00187
GLI1
PTCH1
BMP2
TP53
...

我想创建一个循环,遍历15个文件中的每一个,每次比较2个,创建唯一的对。因此,File 1File 2会相互比较,给出一个输出,告诉我它找到了多少匹配以及它们是什么。所以在上面的例子中,输出将是:

1 match and TP53

循环将用于相互比较所有文件,因此1,3File 1针对File 3),1,4等等。

f1 = set(open(str(cancers[1]) + '.csv', 'r'))
f2 = set(open(str(cancers[2]) + '.csv', 'r'))
f3 = open(str(cancers[1]) + '_vs_' + str(cancers[2]) + '.txt', 'wb').writelines(f1 & f2)

上述工作,但我很难创建循环部分。

2 个答案:

答案 0 :(得分:1)

要遍历所有15对,这样的事情可以做到:

for i in range(1, 15):
    for j in range(i+1, 16):
        f1 = set(open(str(cancers[i]) + '.csv', 'r'))
        f2 = set(open(str(cancers[j]) + '.csv', 'r'))
        f3 = open(str(cancers[i]) + '_vs_' + str(cancers[j]) + '.txt',
                  'wb').writelines(f1 & f2)

答案 1 :(得分:1)

为了不比较同一个文件,并使代码对癌症的数量灵活,我会像这样编码。我假设cancer是一个列表。

# example list of cancers
cancers = ['BRCA', 'BLCA', 'HNSC']
fout = open('match.csv', 'w')
for i in range(len(cancers)):
    for j in range(len(cancers)):
        if j > i:
            # if there are string elements in cancers,
            # then it doesn't need 'str(cancers[i])'
            f1 = [x.strip() for x in set(open(cancers[i] + '.csv', 'r'))]
            f2 = [x.strip() for x in set(open(cancers[j] + '.csv', 'r'))]
            match = list(set(f1) & set(f2))
            # I use ; to separate matched genes to make excel able to read
            fout.write('{}_vs_{},{} matches,{}\n'.format(
                cancers[i], cancers[j], len(match), ';'.join(match)))
fout.close()

结果

BRCA_vs_BLCA,1 matches,TP53
BRCA_vs_HNSC,6 matches,TP53;BMP2;GLI1;C00187;PTCH1;K06227
BLCA_vs_HNSC,1 matches,TP53