0

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

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

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

这是我的代码:

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?

4

2 回答 2

1

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

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

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

于 2013-06-12T15:40:26.697 回答
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()使用空格作为分隔符:

csv.register_dialect("custom", delimiter=" ", skipinitialspace=True)
于 2013-06-12T15:41:02.290 回答