Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图从csv生成字典,但结果为空_Python_Csv_Dictionary_Is Empty - Fatal编程技术网

Python 试图从csv生成字典,但结果为空

Python 试图从csv生成字典,但结果为空,python,csv,dictionary,is-empty,Python,Csv,Dictionary,Is Empty,这是我的第一篇堆栈溢出文章,请理解。我是Python新手,正在尝试Eric Matthes的Python速成课程第二版中的练习16-7,在练习中,我获得了一个csv数据集,并创建了一个程序,将相关数据放入字典中,然后我可以用它制作一个地图来显示数据 我的问题是,我存储在变量中要放入字典的数据似乎没有进入,使字典为空,从而阻止我创建地图来显示数据。希望你能从下面的代码中明白我的意思 # data into list filename = 'API_SP.DYN.TFRT.IN_DS2_en_csv

这是我的第一篇堆栈溢出文章,请理解。我是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:
当您第二次使用“for row in reader”时,没有什么可重复的

我将使用的解决方案是将生成器中的所有内容存储到局部变量中。比如:

local_var = []
for row in reader:
    local_var.append(row)

然后在下游使用这个局部变量。或者您可以再次初始化读取器,将其连接到文件,然后填充“生育率数据”。

我们不想看到您的所有代码。请回答您的问题,并提供一个可运行的(以及一个不使用
pygal
模块的)。非常感谢,这样做了。我对csv.DictReader的不熟悉一定是我的原因。