gpt4 book ai didi

python - 解析 .csv 文件跳过一行

转载 作者:行者123 更新时间:2023-11-30 22:31:13 24 4
gpt4 key购买 nike

我有一个如下所示的输入文件:

SET,LAYOUT,LAYER,NAME
RESTAURANT,RR_FACING1,BACKDROP,restaurant1
RESTAURANT,RR_FACING1,BACKGROUND,chairs1
RESTAURANT,RR_FACING2,BACKDROP,restaurant2
RESTAURANT,RR_FACING3,BACKDROP,restaurant1
RESTAURANT,RR_FACING3,FOREGROUND,potted_plant1
SPACE,SPACE1,BACKDROP,starfield1
SPACE,SPACE2,BACKDROP,starfield2
SPACE,SPACE2,BACKGROUND,planet1
SPACE,SPACE2,FOREGROUND,spaceship1
FOREST,FOREST1,BACKDROP,forest1
FOREST,FOREST1,BACKGROUND,trees1
FOREST,FOREST1,FOREGROUND,bushes1

我编写了以下代码来解析它。不包括导入语句:

full_path_to_file = 'C:\\SAMPLE_INFO.csv'
openfile = open(full_path_to_file)
reader = csv.DictReader(openfile)

headers = next(reader)
layouts_schema = {}

for group1, records1 in itertools.groupby(reader, key=operator.itemgetter("SET")):
layouts_schema[group1] = {}
for group2, records2 in itertools.groupby(records1, key=operator.itemgetter("LAYOUT")):
layouts_schema[group1][group2] = list(records2)

除了一个问题之外,这非常有效。它会跳过组合键 RESTAURANT/RR_FACING1/BACKDROP 的第一行/值。除了标题后的第一行之外,它会正确提取所有内容。因此输出是这样的:

{'FOREST': {'FOREST1': [{'LAYER': 'BACKDROP',
'LAYOUT': 'FOREST1',
'NAME': 'forest1',
'SET': 'FOREST'},
{'LAYER': 'BACKGROUND',
'LAYOUT': 'FOREST1',
'NAME': 'trees1',
'SET': 'FOREST'},
{'LAYER': 'FOREGROUND',
'LAYOUT': 'FOREST1',
'NAME': 'bushes1',
'SET': 'FOREST'}]},
'RESTAURANT': {'RR_FACING1': [{'LAYER': 'BACKGROUND',
'LAYOUT': 'RR_FACING1',
'NAME': 'chairs1',
'SET': 'RESTAURANT'}],
'RR_FACING2': [{'LAYER': 'BACKDROP',
'LAYOUT': 'RR_FACING2',
'NAME': 'restaurant2',
'SET': 'RESTAURANT'}],
'RR_FACING3': [{'LAYER': 'BACKDROP',
'LAYOUT': 'RR_FACING3',
'NAME': 'restaurant1',
'SET': 'RESTAURANT'},
{'LAYER': 'FOREGROUND',
'LAYOUT': 'RR_FACING3',
'NAME': 'potted_plant1',
'SET': 'RESTAURANT'}]},
'SPACE': {'SPACE1': [{'LAYER': 'BACKDROP',
'LAYOUT': 'SPACE1',
'NAME': 'starfield1',
'SET': 'SPACE'}],
'SPACE2': [{'LAYER': 'BACKDROP',
'LAYOUT': 'SPACE2',
'NAME': 'starfield2',
'SET': 'SPACE'},
{'LAYER': 'BACKGROUND',
'LAYOUT': 'SPACE2',
'NAME': 'planet1',
'SET': 'SPACE'},
{'LAYER': 'FOREGROUND',
'LAYOUT': 'SPACE2',
'NAME': 'spaceship1',
'SET': 'SPACE'}]}}

其中缺少以下部分,这应该是 RESTAURANT 分组中的第一部分:

 {'LAYER': 'BACKDROP',
'LAYOUT': 'RR_FACING1',
'NAME': 'restaurant1',
'SET': 'RESTAURANT'}

希望这是有道理的。为什么它跳过第一行,并且只跳过第一行?

最佳答案

使用 DictReader 使用标题行来确定字典键。

这意味着下一行代码会消耗您的第一行数据:

headers = next(reader)

你可以去掉那条线。如果您需要 csv.DictReader 对象上的标题列表,您可以执行以下操作

headers = reader.fieldnames

关于python - 解析 .csv 文件跳过一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45872042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com