使用分隔符将2d数组写入csv文件

时间:2017-06-22 06:16:10

标签: python arrays

正如标题所说,我想使用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'而导致我的数组写入一行而不是多行,因此无效。

6 个答案:

答案 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指出错误。