为什么在写入CSV时间隔关闭?

时间:2013-06-12 15:35:16

标签: python list csv

我正在尝试使用python创建一个csv。在每一行中,我希望第一个单元格是一个提出问题的人,第二个单元格是一个回答的人,第三个单元格是发布答案的时间。我只是创建一个简单的列表,其中列表的每个元素都是一个单元格,这意味着列表如下所示:

Jan Janet 3/4/05
Jason John 3/6/05
...

但是我的输出每个单元格只有一个字母而不是一个单词。

Heres是我的代码:

import csv
import collections
from collections import defaultdict

edgelist = []

csv.field_size_limit(1600000)

f = open('/Users/samuelfinegold/Documents/harvard/edXresearch/snaCreationFiles/time_series/time_series.csv','rU')
reader = csv.DictReader(f, delimiter=',')

    if line['types'] == 'Question':
        #print 'T'
        source = line['author_id']
    else:
        edgelist.append(source + " " + line['author_id'] + " " + line['time'])

with open("/Users/samuelfinegold/documents/harvard/edxresearch/snacreationfiles/time_series/connections_times_series_ex.csv", "w") as the_file:
    csv.register_dialect("custom", delimiter=",", skipinitialspace=True)
    writer = csv.writer(the_file, dialect="custom")
    writer.writerows(edgelist)      

the_file.close()        
f.close()

如何获得每个单元格而不是字母的csv?

2 个答案:

答案 0 :(得分:1)

edgelist应该是列表(或元组列表)的列表,而不是字符串列表。尝试将edgelist.append()行更改为以下内容:

edgelist.append([source, line['author_id'], line['time']])

您当前正在获取列中的每个字母,因为当您向csv文件写入行时,它期望迭代,其中每个元素都是一列。如果您尝试将字符串写为行,则该字符串中的每个字母都将被解释为单独的列。这意味着每一行都应该是一个列表,因此writer.writerows()需要一个列表列表。

答案 1 :(得分:0)

.writerows()期望有序列表;实际上是列表或元组列表,但字符串也是序列。

将元组添加到edgelist

edgelist.append((source + " " + line['author_id'] + " " + line['time'],))

因为字符串也是序列,单个字符序列,您会看到Jan Janet 3/4/05输入被拆分为单独的单元格。

如果您想要一个以空格分隔的列表,请使用:

csv

并告诉edgelist.append((source, line['author_id'], line['time'],)) 使用空格作为分隔符:

csv.writer()