【问题标题】:Using Python's CSV library to print an array as a csv file使用 Python 的 CSV 库将数组打印为 csv 文件
【发布时间】:2015-07-08 22:14:34
【问题描述】:

我有一个这样的 python 列表:

[['a','b','c'],['d','e','f'],['g','h','i']]

我正在尝试将其转换为 csv 格式,以便将其加载到 excel 中:

a,b,c
d,e,f
g,h,i

使用这个,我正在尝试将数组写入 csv 文件:

with open('tables.csv','w') as f:
    f.write(each_table)

但是,它会打印出这个:

[
[
'
a
'
,
...
...

然后我尝试将它放入一个数组(再次)然后打印它。

each_table_array=[each_table]
with open('tables.csv','w') as f:
        f.write(each_table_array)

现在,当我打开 csv 文件时,它是一堆未知字符,当我将其加载到 excel 中时,我会为每个单元格获取一个字符。

不太确定是我用错了csv库,还是数组部分。

我刚刚发现我从中提取数据的表格在其一个单元格中有另一个表格,这会扩展并弄乱整个格式

【问题讨论】:

  • 你说的表是什么意思?嵌套列表在哪里?
  • 或者更确切地说它是一个 python 列表,我编辑它
  • 如何遍历列表并写入每个字符 + 一个逗号?
  • 嗯,这只是一个例子.. 并非所有的整体都是一个字符长

标签: python arrays csv python-3.x export-to-csv


【解决方案1】:

您需要使用csv 库来完成您的工作:

import csv
each_table = [['a','b','c'],['d','e','f'],['g','h','i']]
with open('tables.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)
    for row in each_table:
        writer.writerow(row)

【讨论】:

  • 这仍然会打印出每一行的每个字符
  • 我认为作者出于某种原因在每一行都将其全部打印出来
  • @user2883071,您使用的是哪个 python 版本?我稍微更新了上面的 sn-p 以获得更完整的示例,我的 tables.csv 文件有 3 行,每行有 3 个字符,如预期的那样。我在 python 2.7 和 3.4 上都试过了。
  • 你可以做writerows并保存一行。
  • zzz 我刚刚发现我从中提取数据的表在其一个单元格中有另一个表,这会扩展并弄乱整个格式。我从中提取的表格也有超链接,这些显示为重复的单元格
【解决方案2】:

使用csv 模块来处理csv 文件作为一种更灵活和pythonic 的方式请注意,当您在python 2 中时,您需要在open 函数中使用newline='' * 方法。然后您可以使用csv.writer 打开您的 csv 文件进行写入:

import csv
with open('file_name.csv', 'w',newline='') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=',')
    spamwriter.writerows(main_list)

来自 python wiki:如果未指定 newline='',则嵌入在引用字段中的换行符将不会被正确解释,并且在使用 \r\n linendings on write 的平台上将添加额外的 \r。指定 newline='' 应该始终是安全的,因为 csv 模块会执行自己的 (universal) 换行处理。

【讨论】:

  • 当我使用这个方法时,wb 会抛出一个错误:TypeError: 'str' doe snot support the buffer interface
  • @user2883071 对不起,我错过了你在 python3 中,你需要w
  • @DSM 我就是这么做的 :)
  • 你可以做writerows并保存一行。
  • zzz 我刚刚发现我从中提取数据的表在其一个单元格中有另一个表,这会扩展并弄乱整个格式。我从中提取的表格也有超链接,这些显示为重复的单元格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多