将数组写入csv

时间:2016-06-23 19:57:01

标签: python arrays csv

我循环遍历2d数组(数据),然后使用我循环的数组的不同段填充字段。以下是示例代码:

with open('output.csv' , 'wb') as outcsv:
    headers = ['Field1', 'Field2', 'LongField']
    writer = csv.DictWriter(outcsv, headers)
    writer.writeheader()
    for i in range(numArrays):
        row = [{'Field1': data[i][:3],
                'Field2': data[i][3:5],
                'LongField': data[i][5:]}]
        writer.writerows(row)

除了' LongField'之外,我得到所有字段的所需输出。值的数量很大(数百,甚至可能是几千)并且变化很大。 这是我的输出:

Field1 Field2 LongField
3,4,5  1,2    array([0,0,0,...,0,0,0])
5,3,6  0,9    array([0,0,0,...,0,0,0])

这是否正在发生,因为我超出某种最大允许值,我可以写入一个单元格?我有办法将所有实际值写入单元格吗?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我怀疑OP想要打印所有这些0,无论有多少。不是array(也不是),也没有省略号...

修改 见@John的评论:

  

对于将来发生这种情况的任何人,numpy.savetxt()执行OP想要的,而无需手动创建字符串。

<强>猜测:

尝试','.join([str(_) for _ in data[i][5:]])

完整:

row = [{'Field1': data[i][:3], 'Field2': data[i][3:5], 'LongField':  ','.join([str(_) for _ in data[i][5:]])}]

Related to this answer.

帮助我们:

您使用的是哪种阵列?你能告诉我们更多代码吗?或者告诉输出:type(data[0])

修改

OP澄清了什么样的数组及其存在时间:

它是numpy.array(或ndarray的一个维度;相同的str处理)

它长达2,984。

当数组有1000个或更多元素时,显然numpy.array的str版本会截断除前3个和后3个元素之外的所有元素

999个元素:

str(numpy.array(range(1000)))
>>[  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
>>  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35
>>  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53
>>  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71
>>  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89
>>  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107
etc...

1000个元素:

str(numpy.array(range(1001)))
>>'[   0    1    2 ...,  998  999 1000]'

所以我认为我的原始建议应该有效,将其强制为你想要的字符串表示。我认为CSV DictWriter应该注意引用。

','.join([str(_) for _ in numpy.array(range(2987))])

编辑

解释我的回答:

所以你没有给DictWriter一个字符串 - 它必须推断出字符串。我假设DictWriter将使用Python str函数。正如文档所述,str函数将:

  

返回一个包含对象的可打印表示的字符串。

我认为numpy开发人员认为array&gt; 999元素非常&#34;可打印&#34;

因此,在1000以上,他们可能会使__str__函数返回&#34;汇总&#34;版本,仅显示前3个元素和最后3个元素。

您可以创建所需的字符串,而不是让DictWriter或str为您提供字符串。我相信你想要的字符串只是用逗号分隔的数组的所有元素,这就是这段代码的作用:

','.join([str(_) for _ in [1,2,3]])
  • ','.join()将&#34;连接&#34;逗号上的所有元素;元素必须是字符串
  • [str(_) for _ in [1,2,3]]会将各个元素转换为字符串(联接工作所需)