将列表打印到文件中

时间:2012-10-09 13:11:41

标签: python list dictionary

我在python中编写一个脚本,我从一些文件中提取一些信息并将其传递到另一个文件中。

我有2个字典,其中包含类的元素列表,我想将列表的每个元素写入.csv文件。

当我尝试将数据写入文件时,它以一种奇怪的方式出现。我希望数据以这种方式出现:

Sample_3 45526536 7010285 31195850 7320401 45500691 7186449 31021951 7292291  
Sample_1 48885783 7715654 33474067 7696062 48857972 7907873 33282945 7667154

但我有这个结果:

 Sample_3 ['45526536'] ['7010285'] ['31195850'] ['7320401'] ['45500691'] ['7186449'] ['31021951'] ['7292291']
 Sample_1 ['48885783'] ['7715654'] ['33474067'] ['7696062'] ['48857972'] ['7907873'] ['33282945']['7667154']

有谁知道为什么在数字中添加['']?我尝试制作一个非常简单的方法来消除['']但是我不会在文件中打印任何内容。

def correct_str(value):  
    new= str(value).strip("['")
    final= str(new).strip("']")
    return final

这里的代码是我在字典中添加元素,字典是一个名为stat_dict_l_u的全局变量,名称是字典的键,在本例中为Sample_1和Sample_2,列表值是包含的列表我从文件中得到的数字。我相信也许我的问题来自于我将值添加到字典中的方式。

def processNumbersLeft(name,list_values):

    list_reads=[]


    for value in list_values:
        print value.total_reads
        list_reads.append(value.total_reads)



    list_aligned_once=[]
    for value in list_values:

        n=re.split(" ",value.aligned_once)
                 list_aligned_once.append(n[0])


    list_failed=[]
    for value in list_values:

        n=re.split(" ",value.failed)
        list_failed.append(n[0])

    list_aligned_several=[]
    for value in list_values:

        n=re.split(" ",value.aligned_several)

        list_aligned_several.append(n[0])



    stat_elem=Statistics(list_reads,list_aligned_once,list_failed,list_aligned_several)

    stat_dict_l_u[name]=stat_elem

谢谢!

2 个答案:

答案 0 :(得分:4)

尝试使用这种情况:

def to_file(d):
    return '\n'.join("%s %s" % (key, ' '.join(map(str, values))) for key, values in d.items())

使用:

>>> print to_file({'Sample_1': [1,2,3], 'Sample_2': [4,5,6]})
Sample_1 1 2 3
Sample_2 4 5 6

注意,如果您需要使用csv-file进行大量工作,请使用有用的模块csv。使用示例:

import csv
with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ', quoting=csv.QUOTE_MINIMAL)
    for key, values in d.items():
        spamwriter.writerow([key] + values)

此示例完全符合您的需要。有关详细信息,请阅读documentation

答案 1 :(得分:2)

将数据写入文件时,它会将您的对象转换为字符串。 ['']表示法表示您的数据包含在列表中。

您希望为每个条目撰写value[0]而不是value

举例说明:

>>> value = ['foobar']
>>> value
['foobar']
>>> str(value)
"['foobar']"
>>> value[0]
'foobar'