我循环遍历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])
这是否正在发生,因为我超出某种最大允许值,我可以写入一个单元格?我有办法将所有实际值写入单元格吗?
任何帮助将不胜感激!
答案 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:]])}]
帮助我们:
您使用的是哪种阵列?你能告诉我们更多代码吗?或者告诉输出: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]]
会将各个元素转换为字符串(联接工作所需)