我正在尝试从CSV将每个值读入python字典。我做错了什么?

2024-10-06 12:45:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在DynamoDB(amazonweb服务)中使用batch_writer()。我读取第一个CSV,将每个标题存储在Dict中

CSV#1->;我有三个口述(国家名称、语言、ISO3)。国家名称是DynamoDb表中的主键

CSV#2->;我只想存储CSV中的一列,因此我只有一个Dict(区域)

当我上传这些值时,它不会像CSV1中的3个DICT那样循环遍历区域中的每个值

        with open('shortlist_languages.csv', 'r') as file:
            reader = csv.DictReader(file)

            for row in reader:
                country_name = {
                    'Country Name': row['Country Name']
                }

                languages = {
                    'Languages': row['Languages']
                }

                iso3 = {
                    'ISO3': row['ISO3']
                }
                with open('shortlist_area.csv', 'r') as file_area:

                    reader_area = csv.DictReader(file_area)
                    for row in reader_area:
                        area = {
                            'Area': row['Area']
                        }
                        
                        for vals_area in area.values():
                            for value in country_name.values():
                                print(value)
                                for values in languages.values():
                                    for values_iso3 in iso3.values():
                                        with table.batch_writer(overwrite_by_pkeys=['Country Name']) as batch:
                                            batch.put_item(
                                                Item={
                                                    'Country Name': value,
                                                    'Languages': values,
                                                    'ISO3': values_iso3,
                                                    'Area':vals_area
                                                }
                                            )

我的DynamoDB表格截图——正如你们所看到的那个样,这个区域并没有正常循环。我的CSV中区域的最后一个值正在重复打印。我怎样才能解决这个问题

DynamoDB table

CSV#1样本:

ISO3,Country Name,Languages
ALB,Albania,Albanian
DZA,Algeria,Arabic,Tamazight
AND,Andorra,Catalan
AGO,Angola,Portuguese

CSV#2样本

ISO3,Country Name,Area
ALB,Albania,28748
DZA,Algeria,2381741
AND,Andorra,468
AGO,Angola,1246700

Tags: csvnamein区域forbatchareacountry
1条回答
网友
1楼 · 发布于 2024-10-06 12:45:49

您的代码嵌套不正确。下面是一些示例代码,它首先将语言文件读入字典,然后循环遍历区域文件:

languages = {}
table = []

# Load languages, catering for multiple languages
with open('shortlist_languages.csv') as languages_file:
    for line in languages_file:
        fields = line.strip().split(',')
        languages[fields[0]] = ','.join(fields[2:])

# Load countries
with open('shortlist_area.csv') as countries_file:
    for line in countries_file:
        fields = line.strip().split(',')
        table.append(
            {
                'Country Name': fields[1],
                'Languages': languages[fields[0]],
                'ISO3': fields[0],
                'Area': fields[2]
 
            }
        )

print(table)

(我懒得使用CSV函数!)

输出为:

[
    {
        "Country Name": "Country Name",
        "Languages": "Languages",
        "ISO3": "ISO3",
        "Area": "Area"
    },
    {
        "Country Name": "Albania",
        "Languages": "Albanian",
        "ISO3": "ALB",
        "Area": "28748"
    },
    {
        "Country Name": "Algeria",
        "Languages": "Arabic,Tamazight",
        "ISO3": "DZA",
        "Area": "2381741"
    },
    {
        "Country Name": "Andorra",
        "Languages": "Catalan",
        "ISO3": "AND",
        "Area": "468"
    },
    {
        "Country Name": "Angola",
        "Languages": "Portuguese",
        "ISO3": "AGO",
        "Area": "1246700"
    }
]

请注意,阿尔及利亚在其输出中有多种语言

相关问题 更多 >