csv.DictReader 给出意想不到的结果

csv.DictReader giving unexpected results

我的 CSV 文件:

website, username, password
google.com, test1, lamepass
instagram.com, test2, passlame

我的python脚本:

with open(database_path) as database:
    csv_read = csv.DictReader(database)
    for card in csv_read:
        print(card['website'])

哪个returns:

google.com
instagram.com

但是这段代码:

with open(database_path) as database:
    csv_read = csv.DictReader(database)
    for card in csv_read:
        print(card['password'])

Returns:

KeyError: 'password'

我不明白这个问题,网上资源只是展示例子,其中 none 解释了这个问题。他们确实谈论 KeyErrors,但他们似乎没有解决 CSV 文件如何包含密钥 ('password'),但仍然 returns 密钥错误。

我是不是做错了什么?

password(和username)之前多了一个space:

csv = """website, username, password
google.com, test1, lamepass
instagram.com, test2, passlame"""

with open('file.csv', 'w+') as f:
    f.write(csv)

import csv

with open('file.csv', 'r+') as database:
    csv_read = csv.DictReader(database)
    for card in csv_read:
        print(card)


OrderedDict([('website', 'google.com'), (' username', ' test1'), (' password', ' lamepass')])
OrderedDict([('website', 'instagram.com'), (' username', ' test2'), (' password', ' passlame')])

您应该尝试使用以下方法从您的 csv 中删除多余的 spaces:

csv = csv.replace(", ", ",")

在您的 csv 文件中,逗号分隔值之间有空格。删除它们,它应该可以工作。

否则试试这个:

import csv

with open(database_path) as database:
    csv_read = csv.DictReader(database)

    for card in csv_read:
        print(card[" password"]) # notice the space!!!