python - Python csv.DictReader 返回 KeyError
问题描述
我正在尝试创建一个根据用户输入读取/写入 csv 文件的脚本。它几乎模拟了密码管理器。但是,当我尝试使用 csv.DictReader 通过脚本查看它时,它返回 KeyError。
csv 文件创建为空白,数据通过脚本本身输入。
import csv
with open('Pass.csv') as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter=',')
for lines in csv_reader:
print(f'{row["application"]} | {row["ID"]} | {row["password"]}')
我注意到如果我改变
print(f'{row["application"]} | {row["ID"]} | {row["password"]}')
至
print(lines)
它返回以下输出:
OrderedDict([(None, ['application', 'ID', 'password'])])
OrderedDict([(None, ['asd', 'dsa', 'asd'])])
所以我的问题是为什么它首先返回 None 这似乎是导致 KeyError 出现的问题。
链接中是我用来测试 DictReader 的 csv 文件: http ://www.filedropper.com/pass_1
解决方案
我运行了您的确切代码,但无法重现您的错误。输入两个条目后,我得到:
>>> readPass()
Application | ID | Password
ap1 | id1 | pw1
application | ID | password
ap2 | id2 | pw2
如您所见,打印工作正常,但您确实有一个错误,即您正在为 CSV 文件的每个条目编写新标题。
推荐阅读
- python - 如何使用 Django/Python 在 SQLite 中存储获取的 JSON 数据
- tensorflow - Colab pip install --upgrade ternsorflow 返回错误
- powershell - 在一串行中获取其他数量的代码
- unit-testing - 单元测试非 void 方法
- sumo - 如何在不更改模拟步频的情况下更改 SUMO 中的 gui 刷新率?
- javascript - 如何过滤 API?
- api - 如何指定来自 API 的特定数据?
- javascript - 使用正则表达式测试数组中的 4 个单词有一个完美匹配
- sql - 从另一个表中插入选定的数据
- macos - 从 Visual Studio 连接到 Mac 无法正常工作