我正在尝试使用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?
答案 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()