Python DictReader应在错误的列计数上出错
如果一行中的列数与标题列数不匹配,是否应在Python DictReader应在错误的列计数上出错,python,csv,Python,Csv,如果一行中的列数与标题列数不匹配,是否应在读写器上使其引发异常 (我的重点): 为了更容易地指定输入和输出记录的格式,将特定的格式参数分组到方言中。方言是方言类的一个子类,它有一组特定的方法和一个validate()方法。当创建读写器对象时,程序员可以指定一个字符串或方言类的子类作为方言参数除了方言参数之外,程序员还可以指定单独的格式化参数,这些参数与下面为方言类定义的属性同名 方言。严格 如果为True,则在错误的CSV输入上引发异常错误。默认值为False 我的解释是,如果任何一行中的字段数
读写器上使其引发异常
(我的重点):
为了更容易地指定输入和输出记录的格式,将特定的格式参数分组到方言中。方言是方言类的一个子类,它有一组特定的方法和一个validate()方法。当创建读写器对象时,程序员可以指定一个字符串或方言类的子类作为方言参数除了方言参数之外,程序员还可以指定单独的格式化参数,这些参数与下面为方言类定义的属性同名
方言。严格
如果为True,则在错误的CSV输入上引发异常错误。默认值为False
我的解释是,如果任何一行中的字段数与标题行中的字段数不匹配,我可以在DictReader
上设置strict=True
,并让它引发错误
我的代码:test.py
导入csv
从pathlib导入路径
路径=路径('mal.csv')
使用path.open(newline=“”)作为f:
csv\u reader=csv.DictReader(f,strict=True)
对于csv_读取器中的行:
打印(行)
我的csv:mal.csv
This,Has,many,columns,of,text
This,misses,some
This,has,the,right,number,here
And,here,there,are,too,many,columns,sure,
python./test.py
不会引发错误并正确打印出行。我怎样才能出错?鉴于@juanpa.arrivillaga的评论,我想strict
并没有达到我的预期,我修改了代码,通过在.values()
中检查None
来手动引发错误(由于像,
或,\r\n
这样的空项被编码为空字符串):
导入csv
从pathlib导入路径
路径=路径('mal.csv')
使用path.open(newline=“”)作为f:
csv\u reader=csv.DictReader(f,strict=True)
对于csv_读取器中的行:
如果line.values()中没有或line.keys()中没有:
raise csv.Error(f“第{line}行上缺少或额外的值”)
打印(行)
我还尝试将DictReader.restval
更改为一个函数或lambda,以引发这是一个例外,但这并没有按照我想要的方式工作。严格地说,你的mal.csv
没有问题。我想这一切都取决于“无效输入”的含义。是的,我找不到任何官方描述“严格的"因此,我只能找到与引用和输入意外结束相关的任何内容……这可能值得作为官方错误跟踪程序上的文档错误提出来,因为我认为它不是为了捕捉您想要的情况,但我可以理解您为什么会期望这样。因为您没有指定字段名
argu当您创建DictReader
时,它会将文件的第一行视为包含它们。创建后,您可以通过引用属性来查看其中的内容(以及数量)。这将为您提供一种相对简单的方法,以编程方式在读取其余行时检查每行的长度(并根据您的意愿进行处理)。@martineau,这不足以确定一行是否缺少值,因为这些键仍将存在于该行的字典中,但值为None
。