【问题标题】:Write a cell or a row with csvwriter in python在python中用csvwriter写一个单元格或一行
【发布时间】:2018-07-26 13:04:05
【问题描述】:

我想将我的结果列表导出到 .xls 文件中,但结果与预期不符。

我的代码是:

    file = filedialog.asksaveasfile(mode='w', defaultextension=".xls")

if file:
    csvWriter = csv.writer(file, dialect='excel')
    for ele in arg:
        lista = list(ele)
        csvWriter.writerow(lista)

    file.close()

我的列表lista的内容是:

['ele1', 'ele2', '1215.0', '1.9', '1.37', '"ele3"']

但是 excel 文件中的结果是第一列中列表的内容,而不是 6 列,我列表中的每个元素一个。

我想将所有元素放在不同的列而不是不同的行中。

【问题讨论】:

  • arg 中有什么内容?我认为您需要将 writerow 移到 for 循环之外,并使用 lista.append(ele)。
  • 写了 writerow(ele) 是不是不行?
  • 'arg' 是一个列表的列表,所以 'ele' 是一个列表。谢谢
  • 最后我用pandas解决了这个问题:df = pd.DataFrame(arg) df.to_excel(file.name, header=False, index=False)

标签: excel python-3.x csv


【解决方案1】:

这会将列表放在一行中:

arg=['ele1', 'ele2', '1215.0', '1.9', '1.37', '"ele3"']
import csv

with open("test.csv", 'w') as mfile:
    writer = csv.writer(mfile, quoting=csv.QUOTE_ALL)
    writer.writerow(arg)

在上面的代码中,每个元素都分别调用了 csv 编写器,这就是为什么它放在同一列或不同行中的原因。

【讨论】:

    【解决方案2】:

    csv 格式是一种文本 格式。它由用分隔符分隔的字段组成(默认情况下是逗号 (,),因此是名称),并且可以选择用引号括起来(默认双引号 ")。但通常有不同的分隔符。例如,当逗号用于十进制数时(在法语中 0.5 写为 0,5),通常使用分号 (;) 作为分隔符。在导入时,Excel 应该告诉它将如何加载 csv 文件。如果没有任何反应,您必须在 Excel 参数中搜索,或者直接在 OS 语言中设置预期的分隔符。然后在 csv writer 中声明它,例如:

    csvWriter = csv.writer(file, dialect='excel', delimiter = ";')
    

    不知道更多,也不知道你的系统的csv文件内容和配置,我不能说更多......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多