在 Python 中,当我们使用csv.reader
with时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
?
一种有用的方法是在处理该数据时使用该函数:
import locale
locale.atof(input)
Run Code Online (Sandbox Code Playgroud)
如果您的语言环境设置de
为该文件以便处理这些值,您还可以在此处找到有关该函数和更多选项的更多信息。