如何以 Pythonic 方式检测 CSV 文件中缺失的字段?
我正在尝试使用Python的csv
模块(特别是DictReader
类)来解析一个CSV文件。有没有什么Python风格的方法可以检测到空字段或缺失字段,并抛出错误呢?
这是一个示例文件,使用以下标题:NAME, LABEL, VALUE
foo,bar,baz
yes,no
x,y,z
在解析时,我希望第二行能抛出错误,因为它缺少了VALUE字段。
这里有一段代码,展示了我目前的处理方式(忽略那些硬编码的字符串……它们只是为了简洁):
import csv
HEADERS = ["name", "label", "value" ]
fileH = open('configFile')
reader = csv.DictReader(fileH, HEADERS)
for row in reader:
if row["name"] is None or row["name"] == "":
# raise Error
if row["label"] is None or row["label"] == "":
# raise Error
...
fileH.close()
有没有更简洁的方法来检查CSV文件中的字段,而不需要写一堆if
语句?如果我需要添加更多字段,我也需要更多的条件判断,这样我希望尽量避免。
5 个回答
1
像这样吗?
...
for row in reader:
for column, value in row.items():
if value is None or value == "":
# raise Error, using value of column to say which field is missing
你可以试试用 'if not value:' 这个方式来做判断,而不是你之前用的那种更明确的判断方式。
2
因为 None
和空字符串在判断时都被看作是 False
,所以你需要考虑这一点:
for row in reader:
for header in HEADERS:
if not row[header]:
# raise error
需要注意的是,与其他一些回答不同,你仍然可以选择抛出一个有用的、特定于头部的错误信息。
21
if any(row[key] in (None, "") for key in row):
# raise error
if any(val in (None, "") for val in row.itervalues()):
# raise error
编辑: 更好的方法是: