从2个CSV文件中写入每个组合

2024-05-16 10:32:40 发布

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

我有2个csv文件,其中包含PCR引物的数据。第一个文件包含有关正向引物的数据,第二个文件包含反向引物的数据。每个文件有10行和大约20列,当组合文件1和文件2中的行时,我希望将每行和每种组合生成第三个.csv。所以文件应该是100行40列。 所以文件应该是这样的 第1行:正向1,反向1。 第2行:正向1,反向2。 第3行:正向1,反向3。 .... 第41行:正向5,反向1。 一路向前10,向后10

这是我的密码:

with open(forwards) as f_csv:
    read_forward = csv.reader(f_csv)

    with open(reverses) as r_csv:
        read_reverse = csv.reader(r_csv)

        file_name = "Combinations Matrix.csv"
        f = open(file_name, 'w')

        for fwd in read_forward:
            for rev in read_reverse:               
                for f_value in fwd:
                    f.write(f_value + ',')                  
                for r_value in rev:
                  f.write(r_value + ',')              
                f.write('\n')
f.close()
print('done')

它第一次在外环中完美地工作。换句话说,第一次通过“read_forward”循环。但我不明白为什么当它开始“read_forward”的第二个循环时,它不会像第一次那样写组合。通过对控制台使用print语句,我发现它仍然在第一个文件的行中循环,但似乎它不再执行内部for循环。有人能帮我弄清楚吗

谢谢


Tags: 文件csv数据inforreadvalueas
2条回答

撇开Bug不谈,我认为代码可以改进一点

import csv
import itertools as itt

with open('../resources/temp_in.csv', newline='') as f_1, open('../resources/temp_in_2.csv', newline='') as f_2:
    reader_1 = csv.reader(f_1)
    reader_2 = csv.reader(f_2)
    combs = itt.product(reader_1, reader_2)
    rows_gen = (l_1 + l_2 for l_1, l_2 in combs)
    with open('../out/comb_data.csv', 'w', newline='') as out_file:
        writer = csv.writer(out_file)
        writer.writerows(rows_gen)

{}的内容:

a,1
b,2
c,3
d,4
e,5

{}的内容:

hello,bye
kfa,dko
jfo,pkfe
oajwi,nindwa
idja,iojn

执行后'comb_data.csv'的内容:

a,1,hello,bye
a,1,kfa,dko
a,1,jfo,pkfe
a,1,oajwi,nindwa
a,1,idja,iojn
b,2,hello,bye
b,2,kfa,dko
b,2,jfo,pkfe
b,2,oajwi,nindwa
b,2,idja,iojn
c,3,hello,bye
c,3,kfa,dko
c,3,jfo,pkfe
c,3,oajwi,nindwa
c,3,idja,iojn
d,4,hello,bye
d,4,kfa,dko
d,4,jfo,pkfe
d,4,oajwi,nindwa
d,4,idja,iojn
e,5,hello,bye
e,5,kfa,dko
e,5,jfo,pkfe
e,5,oajwi,nindwa
e,5,idja,iojn

内部CSV读取器在第一次外部迭代后耗尽。将read_reverse设置为:

read_reverse = list(csv.reader(r_csv))

相关问题 更多 >