首页 > 解决方案 > TypeError:列表索引必须是整数或切片,而不是从 JSON 文件中提取键到 CSV 的 str

问题描述

我正在处理一个 JSON 文件来提取文本键并将其转换为 CSV 文件,所以我编写了一个 python 代码来处理这个问题

这是我写的python代码:

import json
import csv
with open("/Users/zahraa-maher/rasa-init-demo/venv/Tickie/external_data/frames2.json") as file:
    data = json.load(file)

fname = "outputText.csv"

with open(fname, "w") as file:
    csv_file = csv.writer(file,lineterminator='\n')
    csv_file.writerow(["text"])
    for item in data["turns"]:
        csv_file.writerow([item['text']])

这是为我显示的错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-7-da84a92079de> in <module>
      9     csv_file = csv.writer(file,lineterminator='\n')
     10     csv_file.writerow(["text"])
---> 11     for item in data["turns"]:
     12         csv_file.writerow([item['text']])

TypeError: list indices must be integers or slices, not str

这也是子文件的一部分:

[
    {
        "user_id": "U22HTHYNP",
        "turns": [
            {
                "text": "I'd like to book a trip to Atlantis from Caprica on Saturday, August 13, 2016 for 8 adults. I have a tight budget of 1700.",
                "labels": {
                    "acts": [
                        {
                            "args": [
                                {
                                    "val": "book",
                                    "key": "intent"
                                }
                            ],
                            "name": "inform"
                        },
                        {
                            "args": [
                                {
                                    "val": "Atlantis",
                                    "key": "dst_city"
                                },
                                {
                                    "val": "Caprica",
                                    "key": "or_city"
                                },
                                {
                                    "val": "Saturday, August 13, 2016",
                                    "key": "str_date"
                                },
                                {
                                    "val": "8",
                                    "key": "n_adults"
                                },
                                {
                                    "val": "1700",
                                    "key": "budget"
                                }
                            ],
                            "name": "inform"
                        }
                    ],
                    "acts_without_refs": [
                        {
                            "args": [
                                {
                                    "val": "book",
                                    "key": "intent"
                                }
                            ],
                            "name": "inform"
                        },
                        {
                            "args": [
                                {
                                    "val": "Atlantis",
                                    "key": "dst_city"
                                },
                                {
                                    "val": "Caprica",
                                    "key": "or_city"
                                },
                                {
                                    "val": "Saturday, August 13, 2016",
                                    "key": "str_date"
                                },
                                {
                                    "val": "8",
                                    "key": "n_adults"
                                },
                                {
                                    "val": "1700",
                                    "key": "budget"
                                }
                            ],
                            "name": "inform"
                        }
                    ],
                    "active_frame": 1,
                    "frames": [
                        {
                            "info": {
                                "intent": [
                                    {
                                        "val": "book",
                                        "negated": false
                                    }
                                ],
                                "budget": [
                                    {
                                        "val": "1700.0",
                                        "negated": false
                                    }
                                ],
                                "dst_city": [
                                    {
                                        "val": "Atlantis",
                                        "negated": false
                                    }
                                ],
                                "or_city": [
                                    {
                                        "val": "Caprica",
                                        "negated": false
                                    }
                                ],
                                "str_date": [
                                    {
                                        "val": "august 13",
                                        "negated": false
                                    }
                                ],
                                "n_adults": [
                                    {
                                        "val": "8",
                                        "negated": false
                                    }
                                ]
                            },
                            "frame_id": 1,
                            "requests": [],
                            "frame_parent_id": null,
                            "binary_questions": [],
                            "compare_requests": []
                        }
                    ]
                },
                "author": "user",
                "timestamp": 1471272019730.0
            },
            {
                "db": {
                    "result": [
                        [
                            {
                                "trip": {
                                    "returning": {
                                        "duration": {
                                            "hours": 0,
                                            "min": 51
                                        },
                                        "arrival": {
                                            "hour": 10,
                                            "year": 2016,
                                            "day": 24,
                                            "min": 51,
                                            "month": 8
                                        },
                                        "departure": {
                                            "hour": 10,
                                            "year": 2016,
                                            "day": 24,
                                            "min": 0,
                                            "month": 8
                                        }
                                    },
                                    "seat": "ECONOMY",
                                    "leaving": {
                                        "duration": {
                                            "hours": 0,
                                            "min": 51
                                        },
                                        "arrival": {
                                            "hour": 0,
                                            "year": 2016,
                                            "day": 16,
                                            "min": 51,
                                            "month": 8
                                        },
                                        "departure": {
                                            "hour": 0,
                                            "year": 2016,
                                            "day": 16,
                                            "min": 0,
                                            "month": 8
                                        }
                                    },
                                    "or_city": "Porto Alegre",
                                    "duration_days": 9
                                },
                                "price": 2118.81,
                                "hotel": {
                                    "gst_rating": 7.15,
                                    "vicinity": [],
                                    "name": "Scarlet Palms Resort",
                                    "country": "Brazil",
                                    "amenities": [
                                        "FREE_BREAKFAST",
                                        "FREE_PARKING",
                                        "FREE_WIFI"
                                    ],
                                    "dst_city": "Goiania",
                                    "category": "3.5 star hotel"
                                }
                            },
                            {
                                "trip": {
                                    "returning": {
                                        "duration": {
                                            "hours": 2,
                                            "min": 37
                                        },
                                        "arrival": {
                                            "hour": 12,
                                            "year": 2016,
                                            "day": 10,
                                            "min": 37,
                                            "month": 8
                                        },
                                        "departure": {
                                            "hour": 10,
                                            "year": 2016,
                                            "day": 10,
                                            "min": 0,
                                            "month": 8
                                        }
                                    },
                                    "seat": "ECONOMY",
                                    "leaving": {
                                        "duration": {
                                            "hours": 2,
                                            "min": 37
                                        },
                                        "arrival": {
                                            "hour": 0,
                                            "year": 2016,
                                            "day": 4,
                                            "min": 37,
                                            "month": 8
                                        },
                                        "departure": {
                                            "hour": 22,
                                            "year": 2016,
                                            "day": 3,
                                            "min": 0,
                                            "month": 8
                                        }
                                    },
                                    "or_city": "Porto Alegre",
                                    "duration_days": 7
                                },
                                "price": 2369.83,
                                "hotel": {
                                    "gst_rating": 0,
                                    "vicinity": [],
                                    "name": "Sunway Hostel",
                                    "country": "Argentina",
                                    "amenities": [
                                        "FREE_BREAKFAST",
                                        "FREE_WIFI"
                                    ],
                                    "dst_city": "Rosario",
                                    "category": "2.0 star hotel"
                                }
                            },
                            {
                                "trip": {
                                    "returning": {
                                        "duration": {
                                            "hours": 0,
                                            "min": 51
                                        },
                                        "arrival": {
                                            "hour": 10,
                                            "year": 2016,
                                            "day": 24,
                                            "min": 51,
                                            "month": 8
                                        },
                                        "departure": {
                                            "hour": 10,
                                            "year": 2016,
                                            "day": 24,
                                            "min": 0,
                                            "month": 8
                                        }
                                    },
                                    "seat": "BUSINESS",
                                    "leaving": {
                                        "duration": {
                                            "hours": 0,
                                            "min": 51
                                        },
                                        "arrival": {
                                            "hour": 0,
                                            "year": 2016,
                                            "day": 16,
                                            "min": 51,
                                            "month": 8
                                        },
                                        "departure": {
                                            "hour": 0,
                                            "year": 2016,
                                            "day": 16,
                                            "min": 0,
                                            "month": 8
                                        }
                                    },
                                    "or_city": "Porto Alegre",
                                    "duration_days": 9
                                },
                                "price": 2375.72,
                                "hotel": {
                                    "gst_rating": 7.15,
                                    "vicinity": [],
                                    "name": "Scarlet Palms Resort",
                                    "country": "Brazil",
                                    "amenities": [
                                        "FREE_BREAKFAST",
                                        "FREE_PARKING",
                                        "FREE_WIFI"
                                    ],
                                    "dst_city": "Goiania",
                                    "category": "3.5 star hotel"
                                }
                            },
                            {
                                "trip": {
                                    "returning": {
                                        "duration": {
                                            "hours": 1,
                                            "min": 30
                                        },
                                        "arrival": {
                                            "hour": 11,
                                            "year": 2016,
                                            "day": 1,
                                            "min": 30,
                                            "month": 9
                                        },
                                        "departure": {
                                            "hour": 10,
                                            "year": 2016,
                                            "day": 1,
                                            "min": 0,
                                            "month": 9
                                        }
                                    },
                                    "seat": "BUSINESS",
                                    "leaving": {
                                        "duration": {
                                            "hours": 1,
                                            "min": 30
                                        },
                                        "arrival": {
                                            "hour": 18,
                                            "year": 2016,
                                            "day": 19,
                                            "min": 30,
                                            "month": 8
                                        },
                                        "departure": {
                                            "hour": 17,
                                            "year": 2016,
                                            "day": 19,
                                            "min": 0,
                                            "month": 8
                                        }
                                    },
                                    "or_city": "Porto Alegre",
                                    "duration_days": 13
                                },
                                "price": 2492.95,
                                "hotel": {
                                    "gst_rating": 0,
                                    "vicinity": [],
                                    "name": "Hotel Mundo",
                                    "country": "Brazil",
                                    "amenities": [
                                        "FREE_BREAKFAST",
                                        "FREE_WIFI",
                                        "FREE_PARKING"
                                    ],
                                    "dst_city": "Manaus",
                                    "category": "2.5 star hotel"
                                }
                            },
                            {
                                "trip": {
                                    "returning": {
                                        "duration": {
                                            "hours": 0,
                                            "min": 51
                                        },
                                        "arrival": {
                                            "hour": 10,
                                            "year": 2016,
                                            "day": 31,
                                            "min": 51,
                                            "month": 8
                                        },
                                        "departure": {
                                            "hour": 10,
                                            "year": 2016,
                                            "day": 31,
                                            "min": 0,
                                            "month": 8
                                        }
                                    },
                                    "seat": "ECONOMY",
                                    "leaving": {
                                        "duration": {
                                            "hours": 0,
                                            "min": 51
                                        },
                                        "arrival": {
                                            "hour": 19,
                                            "year": 2016,
                                            "day": 27,
                                            "min": 51,
                                            "month": 8
                                        },
                                        "departure": {
                                            "hour": 19,
                                            "year": 2016,
                                            "day": 27,
                                            "min": 0,
                                            "month": 8
                                        }
                                    },
                                    "or_city": "Porto Alegre",
                                    "duration_days": 4
                                },
                                "price": 2538.0,
                                "hotel": {
                                    "gst_rating": 8.22,
                                    "vicinity": [],
                                    "name": "The Glee",
                                    "country": "Brazil",
                                    "amenities": [
                                        "FREE_BREAKFAST",
                                        "FREE_WIFI"
                                    ],
                                    "dst_city": "Recife",
                                    "category": "4.0 star hotel"
                                }
                            }
                        ],
                        [],
                        [],
                        [],
                        [],
                        [],
                        []
                    ],
                    "search": [
                        {
                            "ORIGIN_CITY": "Porto Alegre",
                            "PRICE_MIN": "2000",
                            "NUM_ADULTS": "2",
                            "timestamp": 1471271949.995,
                            "PRICE_MAX": "3000",
                            "ARE_DATES_FLEXIBLE": "true",
                            "NUM_CHILDREN": "5",
                            "START_TIME": "1470110400000",
                            "MAX_DURATION": 2592000000.0,
                            "DESTINATION_CITY": "Brazil",
                            "RESULT_LIMIT": "10",
                            "END_TIME": "1472616000000"
                        },
                        {
                            "ORIGIN_CITY": "Atlantis",
                            "NUM_ADULTS": "8",
                            "RESULT_LIMIT": "10",
                            "timestamp": 1471272148.124,
                            "PRICE_MAX": "1700",
                            "NUM_CHILDREN": "",
                            "ARE_DATES_FLEXIBLE": "true",
                            "START_TIME": "NaN",
                            "END_TIME": "NaN"
                        },
                        {
                            "ORIGIN_CITY": "Caprica",
                            "PRICE_MAX": "1700",
                            "NUM_ADULTS": "8",
                            "RESULT_LIMIT": "10",
                            "timestamp": 1471272189.07,
                            "DESTINATION_CITY": "Atlantis",
                            "NUM_CHILDREN": "",
                            "ARE_DATES_FLEXIBLE": "true",
                            "START_TIME": "1470715200000",
                            "END_TIME": "1472011200000"
                        },
                        {
                            "ORIGIN_CITY": "Caprica",
                            "PRICE_MAX": "1700",
                            "NUM_ADULTS": "8",
                            "RESULT_LIMIT": "10",
                            "timestamp": 1471272205.436,
                            "DESTINATION_CITY": "Atlantis",
                            "NUM_CHILDREN": "",
                            "ARE_DATES_FLEXIBLE": "true",
                            "START_TIME": "1470715200000",
                            "END_TIME": "1472011200000"
                        },
                        {
                            "ORIGIN_CITY": "Caprica",
                            "PRICE_MIN": "1700",
                            "NUM_ADULTS": "8",
                            "RESULT_LIMIT": "10",
                            "timestamp": 1471272278.72,
                            "DESTINATION_CITY": "Atlantis",
                            "NUM_CHILDREN": "",
                            "ARE_DATES_FLEXIBLE": "true",
                            "START_TIME": "1470715200000",
                            "END_TIME": "1472011200000"
                        },
                        {
                            "ORIGIN_CITY": "Caprica",
                            "PRICE_MIN": "1700",
                            "NUM_ADULTS": "8",
                            "RESULT_LIMIT": "10",
                            "timestamp": 1471272454.542,
                            "DESTINATION_CITY": "Atlantis",
                            "NUM_CHILDREN": "",
                            "ARE_DATES_FLEXIBLE": "true",
                            "START_TIME": "1471060800000",
                            "END_TIME": "1472011200000"
                        },
                        {
                            "ORIGIN_CITY": "Caprica",
                            "PRICE_MIN": "1700",
                            "NUM_ADULTS": "8",
                            "RESULT_LIMIT": "10",
                            "timestamp": 1471272466.008,
                            "DESTINATION_CITY": "Atlantis",
                            "NUM_CHILDREN": "",
                            "ARE_DATES_FLEXIBLE": "true",
                            "START_TIME": "1471060800000",
                            "END_TIME": "1472011200000"
                        }
                    ]
                },

有没有办法解决这个问题并从这个 JSON 数据集中提取我想要的东西?

注意:Json 结构太长太大,数据很多,我只需要文本,你可以从这里下载查看:https://drive.google.com/file/d/1tBVJ2xYSCpTTUGPJegvAz2ZXbeN0bteX/view? usp=分享

请您是否可以通过编码样式格式显示解决方案,因为如果您将其写为文本,它将无法正常工作,我无法理解

标签: pythonjsoncsv

解决方案


data['text'] 里面不包含任何进一步的字典,因此它不能循环遍历它


推荐阅读