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 解释了这个问题。他们确实谈论 KeyError
s,但他们似乎没有解决 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!!!
我的 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 解释了这个问题。他们确实谈论 KeyError
s,但他们似乎没有解决 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!!!