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