这是我的第一篇堆栈溢出文章,请理解。我是Python新手,正在尝试Eric Matthes的Python速成课程第二版中的练习16-7,在练习中,我获得了一个csv数据集,并创建了一个程序,将相关数据放入字典中,然后我可以用它制作一个地图来显示数据
我的问题是,我存储在变量中要放入字典的数据似乎没有进入,使字典为空,从而阻止我创建地图来显示数据。希望你能从下面的代码中明白我的意思
# data into list
filename = 'API_SP.DYN.TFRT.IN_DS2_en_csv_v2_1622869.csv'
with open(filename, encoding='utf-8-sig') as f:
reader = csv.DictReader(f)
next(reader)
next(reader)
for row in reader:
country_name = row['Data Source']
# '.strip() or 0' part used to ensure fertility data can be read into fertility without
# error caused by blank '' strings in the data.
# Has to be 'row[None]' to avoid KeyError
fertility = float(row[None][-4].strip() or 0)
code = get_country_code(country_name)
if code:
print(code + ': ' + str(fertility))
else:
print('ERROR - ' + country_name)
# build dictionary of population data
fertility_2018_data = {}
for row in reader:
country_name = row['Data Source']
fertility = float(row[None][-4].strip() or 0)
code = get_country_code(country_name)
if code:
fertility_2018_data[code] = fertility
当我尝试“打印(生育率数据)”时,我只得到一个空白的{}字典
我为这一大块道歉,但我想说得更全面一些。这是在尝试了一些事情来修复它之后的代码,包括添加“with open(filename,etc)as f:”位,希望添加该部分可以使文件正确关闭
坦率地说,我很困惑,到目前为止,我在网上找到的任何东西都没有真正帮助我解决这个问题。如果需要的话,我可以试着编辑文章,如果它有助于解决这个问题的话,我可以用一个指向.csv文件的链接。我认识到我的代码可能杂乱无章,效率低下,所以任何其他批评都是可以的
csv.DictReader返回只能迭代一次的生成器对象。您已经在下面几行中对其进行了迭代
当您第二次使用“for row in reader”时,没有什么可重复的
我将使用的解决方案是将生成器中的所有内容存储到局部变量中。比如:
然后在下游使用这个局部变量。或者,您可以再次初始化读取器,将其连接到文件,然后填充“生育率数据”
相关问题 更多 >
编程相关推荐