【问题标题】:How to write a csv with a comma as the decimal separator?如何用逗号作为小数点分隔符编写 csv?
【发布时间】:2016-10-03 14:04:32
【问题描述】:

我正在尝试在 python 中创建一个欧洲格式的 csv。我已经将分隔符设置为分号

writer = csv.writer(response, delimiter=';', quoting=csv.QUOTE_ALL)

但是,这仍然使用点. 作为小数点分隔符。使它使用逗号的正确方法是什么,对于我的语言环境是正确的? 我似乎找不到任何方法在文档中设置它。 (我正在使用并且更愿意坚持使用内置的csv 模块)

【问题讨论】:

  • 数据源中的小数点分隔符是怎么回事?
  • 在这个链接中有一些关于这个的讨论 - 它可能有用:stackoverflow.com/questions/7751157/…
  • @maniexx:是的,另一个问题是关于阅读的,而你的问题是关于写作的。然而,这是一个很小的区别,因为在任何一种情况下,解决方案都是用其他东西替换小数点字符,'.'',' 替换,反之亦然。另一个问题的答案稍微好一点,IMO,因为它们还处理了在处理包含两个字符的大量数字时的潜在问题,以及描述以区域设置感知方式执行操作的代码。
  • 如 OP 所述,这被标记为重复,但链接的问题涉及阅读而不是写作
  • 虽然解决方案可能类似,但问题是不是重复!

标签: python csv localization


【解决方案1】:

有点老套的方法,但这是我能想到的最好的方法:将浮点数转换为字符串并将. 替换为,

def localize_floats(row):
    return [
        str(el).replace('.', ',') if isinstance(el, float) else el 
        for el in row
    ]

for row in rows:
    writer.writerow(localize_floats(row))

如果您想要更好的本地化处理,我建议您使用babel.numbers 包转换所有数字。

【讨论】:

  • 它们不会被编码为 csv 中的字符串吗? IE被其他软件引用并解释为字符串?
  • 当您将; 设置为分隔符时,它们不会被引用。
  • 我不知道其他软件将如何处理这种格式。 IMO 更容易按原样输出数字,然后在您真正需要时(例如在 UI 中)进行本地化。
  • 是的,但是 csv 将在 excel 等中读取。所以很遗憾,这不是一个选择。并且 XLS(x) 或其他一些实际上是格式的格式也是不允许的。
  • 知道了。然后只需用逗号替换点或使用 Babel 的 format_number 函数。它会起作用的。
猜你喜欢
  • 2020-10-14
  • 1970-01-01
  • 2017-09-30
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 2013-02-19
相关资源
最近更新 更多