如何在 Python 中设置 csv.reader 的区域设置?

Tri*_*oan 5 python csv locale

在 Python 中,当我们使用csv.readerwith时quoting=csv.QUOTE_NONNUMERIC,它会将未加引号的字段转换为 float,如文档中指定的:

从 csv 文件读取的每一行都作为字符串列表返回。除非 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
Run Code Online (Sandbox Code Playgroud)

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

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

那么,我如何知道csv.reader要使用哪个区域设置?我在打开文件之前尝试使用locale.setlocale(locale.LC_ALL, 'de_DE'),但不知何故它无法识别它,并且我仍然遇到相同的错误。

CSV 示例de_DE如下所示:

"ID";"Measurement";"Note"
"1";0,23;"Example Value"
"2";1,5;"Another Note"
Run Code Online (Sandbox Code Playgroud)

这个文件会ValueError因为0,23不是语言环境中的数字而导致en_GB

设置区域设置的正确方法是什么csv.reader

Zai*_*tle 1

一种有用的方法是在处理该数据时使用该函数:

import locale

locale.atof(input)
Run Code Online (Sandbox Code Playgroud)

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