从字典中以csv格式编写输出

时间:2014-08-14 18:18:58

标签: python csv dictionary output

我是否可以获得有关如何将输出写入制表符分隔格式的建议?我正在将csv文件与字典进行比较。这是我的代码(这是我遇到问题的代码的结尾):

import csv

file3 = open(r'file.csv','rt', newline = '')
baits = csv.reader(file3, delimiter = '\t')

file4 = open(r'file.txt','wt', newline = '')
common = csv.writer(file4, delimiter = '\t')

for line in baits:
    chromosome = line[0]
    start = int(line[1])
    end = int(line[2])
    if chromosome in dmc:
        for value in dmc[chromosome]:
            base = value[0]
            others = value[1:]
            if base >= start and base <= end:
                count_in += 1
                common.writerow(line + [base, others])

file3.close()
file4.close()

以下是我的输出示例:

chr1    3505353 3505472 3505390 (['3505390', '-', '3.32682966730502e-08', '1.69470366570212e-07', '-35.4239256678281', '1', '156190', 'NM_001011874', '-'],)                                        
chr1    3601312 3601671 3601347 (['3601347', '-', '1.94815734655407e-08', '1.01925267518696e-07', '-40.8010680907877', '2', '60233', 'NM_001011874', '-'],)                                     

我在试图摆脱牙箍时遇到了问题。&#39;&#39;这样大括号中的每个值都是制表符分隔的。

有人知道可以修改代码来实现吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我猜测 - 因为你的问题缺少很多信息 - 你需要改变这一行:

            common.writerow(line + [base, others])

到此:

            common.writerow(line + list(value))

此外,csv文件应以'rb''wb'模式打开。

答案 1 :(得分:0)

如果没有在这里看到您的数据,很难说,但我猜它看起来像这样:

line = ['chr', 3505353, 3505472]
base = 3505390
others = (['3505390', '-', '3.32682966730502e-08', '1.69470366570212e-07', '-35.4239256678281', '1', '156190', 'NM_001011874', '-'],)

如果是,line + [base, others]将是:

['chr', 3505353, 3505472, 3505390,  (['3505390', '-', '3.32682966730502e-08', '1.69470366570212e-07', '-35.4239256678281', '1', '156190', 'NM_001011874', '-'],)]

换句话说,五列,最后一列是包含一个包含一堆值的列表的元组。

我不确切知道你想要什么输出,但我假设该元组中的每个列表意味着一个新行,而列表只是一堆额外的列。在这种情况下:

if base >= start and base <= end:
    count_in += 1
    for other in others:
        common.writerow(line + [base] + others)

这会给你一行看起来像:

chr1    3505353 3505472 3505390 3505390 - 3.32682966730502e-08 1.69470366570212e-07 -35.4239256678281 1 156190 NM_001011874 -

无论如何,获得所需输出的唯一方法是获取列值列表。调试正确的列表要容易得多。尝试打印出各个部分,然后找出你必须做的事情,将这些部分放在一个单独的平面列表中。一旦你拥有了,你就完成了。