【问题标题】:Why is spacing off when I write to CSV?为什么在写入 CSV 时会出现间隔?
【发布时间】:2013-06-12 15:35:15
【问题描述】:

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

【问题讨论】:

    标签: python list csv


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      .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正在做的。不是最好的方式,但仍然如此。
      猜你喜欢
      • 2013-10-20
      • 2014-09-26
      • 2019-12-17
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多