Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在我写入CSV时,间距会变小?_Python_List_Csv - Fatal编程技术网

Python 为什么在我写入CSV时,间距会变小?

Python 为什么在我写入CSV时,间距会变小?,python,list,csv,Python,List,Csv,我正在尝试使用python创建csv。在每一行中,我希望第一个单元格是问问题的人,第二个单元格是回答问题的人,第三个单元格是发布答案的时间。我只是创建一个简单的列表,其中列表的每个元素都是一个单元格,这意味着列表如下所示: Jan Janet 3/4/05 Jason John 3/6/05 ... 但我的输出是每个单元格一个字母,而不是一个单词 这是我的密码: import csv import collections from collections import defaultdict

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

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

edgelist.append([source, line['author_id'], line['time']])
您当前正在获取列中的每个字母,因为当您将行写入csv文件时,每个元素都是一列,因此需要一个iterable。如果试图将字符串作为行写入,则该字符串中的每个字母都将被解释为单独的列。这意味着每一行都应该是一个列表,因此
writer.writerows()
需要一个列表。

.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)

这将把整个字符串如
Jan Janet 3/4/05
放入一个单元格。@F.J:当然,但OP就是这么做的。不是以最好的方式,但仍然是。