我得到了一个 CSV 文件,其中包含行 id
、name
、firstname
和 company
我正在使用 csv.DictReader
遍历 CSV,并希望将一些默认值插入到 name
和 firstname
中,如果它们是空
dict.get()
应该可以解决这个问题 - 但它仅在 name
和 firstname
never 时有效包含任何数据。一旦它们至少包含一次数据,返回的默认值将被忽略并且没有返回
测试.csv
"id","name","firstname","company"
"1","doe","john","jdoe inc"
"2","doe","jane","jdoe inc"
"3",,,"company inc"
导入_csv.py
import csv
with open("test.csv") as csv_file:
reader = csv.DictReader(csv_file)
for row in reader:
firstname = row.get("firstname", "Company")
name = row.get("name", row["company"])
company = row["company"]
print(f"Firstname: {firstname}")
print(f"Name: {name}")
print(f"Company: {company}\n")
上述测试脚本的输出是
Firstname: john
Name: doe
Company: jdoe inc
Firstname: jane
Name: doe
Company: jdoe inc
Firstname:
Name:
Company: company inc
我想要的输出是
Firstname: john
Name: doe
Company: jdoe inc
Firstname: jane
Name: doe
Company: jdoe inc
Firstname: Company # <- default value of dict.get()
Name: company inc # <- default value of dict.get()
Company: company inc
最佳答案
dict.get()
仅在未设置键 时返回默认值。但是 DictReader()
正在设置键,值为空字符串。那是因为该列中有一个空字符串。
事实上,DictReader()
保证每个字段名都有一个键集(这里的字段名取自这里的第一行);如果一列完全缺失,则该值设置为 None
。
您可以使用 or
轻松说明这一点:
firstname = row["firstname"] or "Company"
name = row["name"] or row["company"]
如果键始终存在,则使用 dict.get()
毫无意义。但是,如果 row["firstname"]
设置为空字符串 或 None
,则该值为 considered false ,因此 Python 将生成另一个操作数给 或
。
关于python - dict.get 返回空而不是默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54884676/