繁体   English   中英

如何在 Python 中为 csv.reader 设置语言环境?

[英]How to set locale for csv.reader in Python?

在 Python 中,当我们将csv.readerquoting=csv.QUOTE_NONNUMERIC csv.reader一起使用时,它会将未加引号的字段转换为文档中指定的浮点数:

从 csv 文件读取的每一行都作为字符串列表返回。 除非指定了QUOTE_NONNUMERIC格式选项(在这种情况下未加引号的字段被转换为浮点数),否则QUOTE_NONNUMERIC执行自动数据类型转换。

我写的代码是这样的:

with open(file_path, 'r') as file:
    csv_reader = csv.reader(file, quoting=csv.QUOTE_NONNUMERIC)
    header = next(csv_reader)

    # Read line by line
    while line := next(csv_reader):
        # Further processing here

当文件与我的默认语言环境相同时,数字转换过程工作正常, en_GB 但是如果文件中的数据使用逗号作为小数点分隔符( de_DE语言环境),则代码将中断,因为它无法将该字符串转换为浮点数。

ValueError:无法将字符串转换为浮点数:'0,761843944084108'

那么,我如何告诉csv.reader使用哪个语言环境? 我在打开文件之前尝试使用locale.setlocale(locale.LC_ALL, 'de_DE')但不知何故它无法识别它,我仍然遇到相同的错误。

带有de_DE的示例 CSV 如下所示:

"ID";"Measurement";"Note"
"1";0,23;"Example Value"
"2";1,5;"Another Note"

此文件将导致ValueError因为0,23不是en_GB语言环境中的数字。

csv.reader设置语言环境的正确方法是什么?

一种可以提供帮助的方法是在处理该数据时使用该函数:

import locale

locale.atof(input)

如果您将该文件的语言环境设置为de以处理这些值,您还可以在此处找到有关该函数和更多选项的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM