【问题标题】:Python, Why does csv writer put quotation marks around the valuesPython,为什么csv编写器在值周围加上引号
【发布时间】:2017-05-21 12:04:14
【问题描述】:

我想将列表保存在 csv 文件中。问题是当我想重新加载文件时,值是字符串。

当执行我的代码然后 cat "file_name" 时。输出是:

cat test.csv -> "[1, 2]","[3, 4]","[5, 3]"

我的代码是:

import csv

def save_workschedule():
    small_list = [[1, 2], [3, 4], [5, 3]]
    c = csv.writer(open("test.csv", "w"))
    c.writerow(small_list)

save_workschedule()

如何保存不带引号的列表?

【问题讨论】:

  • “行”是您要传递的列表,其中包含这 3 个子列表。由于这 3 个子列表是行中的项目,因此它们被转换为要写入的字符串,因此用引号括起来。
  • 没有办法。您正在将文本写入文本文件。如果您希望文件在读回时看起来像 "[[1, 2], [3, 4], [5, 3]]",请在 writerow c.writerow([small_list]) 时将 small_list 包装在另一个列表中
  • 那你有没有试过配置报价?你真正想要什么输出?每个子列表应该是单独的行吗?其他逗号应该如何解释?
  • 我想在 csv 文件中有值 [1, 2], [3, 4], [5, 3]
  • @Vinz 那么你绝对需要引号,称为文本限定符。没有它们,当您将该数据读入其他内容时,您将使用错误的逗号进行拆分。不知道更多...我怀疑您可能使您的任务比需要的更难...您总体上要做什么?

标签: python list csv


【解决方案1】:

这在我看来有点像XY problem

引号的原因是您的值包含逗号(其中一个值是"[1, 2]"),因此,CSV 编写器必须将它们放在引号中以区分这些逗号和记录分隔符。

解决此问题的一种方法是选择不同的分隔符,例如。 G。分号。

但将列表保存在 JSON 文件中或腌制它可能更有意义。所以你需要回答的问题是:为什么是 CSV?

【讨论】:

  • 可以是任何文件,认为 csv 模块会很容易使用。我现在开始使用泡菜。
  • @Vinz 另一个不错的 pickle 替代品是 json。它不仅更具人类可读性,而且是一种相对广泛认可的标准文件格式。泡菜或多或少完全限于python脚本。
  • @Vinz:CSV 非常适合存储表格/文本数据。诸如列表之类的 Python 对象应以能够识别此类潜在嵌套结构的格式存储。我更喜欢 JSON 的可读性——生成的文件可以被人类理解。它们也是便携式的。 Pickle 文件是二进制文件,只能在 Python 本身中使用。
猜你喜欢
  • 1970-01-01
  • 2018-04-21
  • 2022-01-18
  • 2015-02-17
  • 2021-02-28
  • 2016-02-21
  • 2013-12-24
  • 1970-01-01
  • 2012-04-08
相关资源
最近更新 更多