正如标题所说,我想使用python将二维数组写入带有分隔符','的csv文件。我的数组看起来像这样(ndarray):
a= [[1,2,3,4],[5,6,7,8]]
我希望输出看起来像:
1,2,3,4
5,6,7,8
with open('./data/positive.csv','wb') as myfile:
wr = csv.writer(myfile) #, quoting=csv.QUOTE_ALL)
wr.writerow(a)
我如何做到这一点?
我已经尝试过这个解决方案,但由于我在''行'中放错了's'而导致我的数组写入一行而不是多行,因此无效。
答案 0 :(得分:14)
在csv
之前使用import csv
模块,请注意您可能需要writerow()
或writerows()
。
您可能会问的不同之处是什么?
writerow将可迭代的单元格写入:
writerow([1,2,2])
->
1,2,2
writerows使用可迭代的单元格迭代来编写:
writerows([[1,2,3],
[4,5,6],
[6,7,8]])
->
1,2,3
4,5,6
6,7,8
可以将其作为变量给出。像
a = [[1,2,3],[4,5,6],[6,7,8]]
writerows(a)
结论写作者获取一维数据(一行),写作者获取二维数据(多行)。
为你编程:
import csv
a = [[1,2,3,4],[5,6,7,8]]
with open("new_file.csv","w+") as my_csv:
csvWriter = csv.writer(my_csv,delimiter=',')
csvWriter.writerows(a)
注意open()
这里有两个参数要写入的文件和模式。
您可能会问什么模式?
它指定应如何打开文件。在我的情况下,w+
表示打开文件my_file.csv
如果它存在,如果它没有那么精细创建一个新文件并写入。
有几种模式可供选择。 注意 :每次使用时都会覆盖w+
。那将是文件中的旧数据将被覆盖,因此如果您只想附加使用a
。有关模式的详细信息,请查看此内容。File modes
答案 1 :(得分:3)
Python内置的csv
模块可以轻松完成此任务:
import csv
a= [[1,2,3,4],[5,6,7,8]]
with open("output.csv", "w") as f:
writer = csv.writer(f)
writer.writerows(a)
答案 2 :(得分:3)
假设a是一个numpy数组,
import numpy
a= [[1,2,3,4],[5,6,7,8]]
numpy.savetxt('output.csv',a,delimiter=",")
答案 3 :(得分:3)
实现这一目标的简单方法如下:
a= [[1,2,3,4],[5,6,7,8]]
f = open('file.csv', 'w')
for item in a:
for i in range(len(item)):
if i == 0:
f.write(str(item[i]))
else:
f.write(',' + str(item[i]))
f.write('\n')
f.close()
另一种选择:
a= [[1,2,3,4],[5,6,7,8]]
f = open('file.csv', 'w')
for item in a:
f.write(','.join([str(x) for x in item]) + '\n')
f.close()
修改:请注意,始终首选使用csv
模块写入csv文件。我建议的解决方案更通用,可以在任何类型的文件中以任何格式编写内容。
答案 4 :(得分:0)
您可以创建文件对象并打印到文件,如下所示。
f=open('file.csv','w')
a= [[1,2,3,4],[5,6,7,8]]
for x in a:
print(",".join([str(i) for i in x]), file=f)
f.close()
答案 5 :(得分:-1)
Python有一个内置的CSV模块,可用于读取和写入CSV。
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: ''. Current value: '[object Object]'.
at viewDebugError (vendor.bundle.js:8962)
at expressionChangedAfterItHasBeenCheckedError (vendor.bundle.js:8940)
您可以使用This链接阅读有关CSV模块的文档。
编辑:将writeRow更改为writer还删除了wb和w +。感谢@s_vishnu指出错误。