在Python中将CSV转换为结构良好的JSON

2024-10-01 07:26:46 发布

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

我有一个CSV文件,其结构如下:

Store, Region, District, MallName, Location

1234,90,910,MallA,GMT
4567,87,902,MallB,EST
2468,90,811,MallC,PST
1357,87,902,MallD,CST

我通过反复的眉头敲打可以得到这样的格式:

^{2}$

下面的代码被分解为与我提供的示例数据集相匹配,但是您可以了解发生了什么。再次强调,这是一个非常迭代和非Python式的,我也在努力朝这个方向发展。(如果有人觉得定义的程序值得发布,我可以)。在

#************
#   Main()
#************
dictHierarchy = {}

with open(getFilePath(), 'r') as f:
    content = [line.strip('\n') for line in f.readlines()]

for data in content:
    data = data.split(",")

    myRegion = data[1]
    myDistrict = data[2]
    myName = data[3]
    myLocation = data[4]
    myStore = data[0]

    if myRegion in dictHierarchy:
        #check for District
        if myDistrict in dictHierarchy[myRegion]:
            #checkforStore
            dictHierarchy[myRegion][myDistrict].update({myStore:addStoreDetails(data)})
        else:
            #add district
            dictHierarchy[myRegion].update({myDistrict:addStore(data)}) 
    else:
        #add region
        dictHierarchy.update({myRegion:addDistrict(data)})

with open('hierarchy.json', 'w') as outfile:
    json.dump(dictHierarchy, outfile)

强迫症我看了上面的JSON输出,认为对于一个盲目打开文件的人来说,它看起来像是一个hodge podge。对于纯文本的可读性,我希望对数据进行分组并将其转换为JSON格式,如下所示:

{"Regions":[
    {"Region":"90", "Districts":[
        {"District":"910", "Stores":[
            {"Store":"1234", "name":"MallA", "location":"GMT"}]},
        {"District":"811", "Stores":[
            {"Store":"2468", "name":"MallC", "location":"PST"}]}]},
    {"Region":"87", "Districts":[
        {"District":"902", "Stores":[
            {"Store":"4567", "name":"MallB", "location":"EST"},
            {"Store":"1357", "name":"MallD", "location":"CST"}]}]}]}

长话短说,我今天浪费了相当长的时间来整理如何在Python中实际填充数据结构,但最终却一无所获。有没有一种干净的,Python式的方法来达到这个目的?这样的努力值得吗?在


Tags: 文件storenameinfordataupdatelocation
1条回答
网友
1楼 · 发布于 2024-10-01 07:26:46

我为您的输入添加了标题,如:

Store,Region,District,name,location
1234,90,910,MallA,GMT
4567,87,902,MallB,EST
2468,90,811,MallC,PST
1357,87,902,MallD,CST

然后使用python csv readergroup by,如下所示:

^{pr2}$

相关问题 更多 >