我是 python 和编程新手,所以我确信我的代码与“pythonic”相反。
我的目标是从服务器获取一个Excel文件,打开它,将文件中的数据写入到一个新文件中。接下来,我打开该文件并使用 dictReader 打印文件中的几列。首先,我编写了一个脚本来打开 Excel 文件并打印列。我能够实现这一目标。现在,我将添加下一步:获取文件,将其写入本地文件,然后打开它。
我收到以下错误,我在发布之前进行了大量研究:
File "request.py", line 20, in <module>
if line['Change'] == ticket_ID:
KeyError: 'Change'
下面是我的代码:
import csv
import sys
import urllib2
data = urllib2.urlopen("URL-HERE")
new_file = open("c:\\file-here", "w")
for fields in data:
new_file.write(fields)
new_file.close()
test_file = 'getrequest6.csv'
csv_file = csv.DictReader(open(test_file, 'r'))
# ticket_ID = sys.argv[1]
ticket_ID = "RMSDB00010243"
for line in csv_file:
if line['Change'] == ticket_ID:
change_col = line['Change']
review_col = line['Review']
phase_col = line['Phase']
print change_col, review_col, phase_col
我发现我从服务器手动下载的文件是 ANSI 编解码器。当我打开该文件时,它会起作用。我创建和写入的新文件 (getrequest6) 是一个 UTF-8 编解码器。我假设这就是 KeyError 的原因,因为当我将数据从 getrequest6 文件复制并粘贴到 ANSI 文件时,上面的代码可以正常工作。
如有任何帮助,我们将不胜感激。我搜索了编解码器类,但我不明白它。
最佳答案
如果问题出在源 csv 文件中,某些行缺少“Change”,那么您可以做的(通常也是一个很好的做法)是检查字典中该键的可用性:
# ...
if 'Change' in line and line['Change'] == ticket_id:
# the rest
关于python - KeyError,与 ANSI 与 UTF-8 编解码器相关吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122442/