【问题标题】:Converting multiple Twitter JSON files into one single CSV将多个 Twitter JSON 文件转换为一个 CSV
【发布时间】:2021-05-15 17:59:12
【问题描述】:

我使用 Twitter API 抓取了大量 Twitter 数据。 现在我将 JSON 文件存储在我的计算机上,我想将它们(大约 1000 个文件)组合成一个 csv 文件以进行进一步处理。

每个 JSON 文件如下所示:

200
{
    "data": [
        {
            "author_id": "34571035",
            "created_at": "2019-12-29T20:02:19.000Z",
            "id": "1211376921407369216",
            "text": "RT @ConnectedCarMag: Free online magazine for connected, autonomous and electric car professionals. Sign up 4 Connected Car mag #ConnectedC\u2026"
        },
        {
            "author_id": "5946022",
            "created_at": "2019-12-29T19:04:28.000Z",
            "id": "1211362363351261184",
            "text": "..."
        }, 
            ...

我尝试了很多不同的代码来将 JSON 文件转换为单个 csv,但是当我尝试使用任何给定的代码时,我得到了错误代码之一:

JSONDecodeError:额外数据:第 2 行第 1 列(字符 4) JSONDecodeError:期望用双引号括起来的属性名称:第 2 行第 1 列(字符 2) ValueError:尾随数据

当我使用 pandas 将文件转换为 csv 时,我在使用 pd.read_json() 时已经遇到了问题。即使我尝试设置 lines=True,我什至无法在 Python 中将 JSON 文件作为 Dataframe 输入。

我对 Python 和整体编程非常陌生,因此非常感谢任何帮助。

【问题讨论】:

    标签: python json csv twitter


    【解决方案1】:

    您的 json 无效,200 不应该在开头。我会修改正在编写该部分的脚本。 如果你 pd.read_json(<json_variable_name>['data']),你可以在 pandas 中使用它,但最简单的方法是使用下面的函数:

    import json
    import csv
    from typing import Dict, List, Union
    
    # standard function I use for reading json files
    def read_json(path: str) -> Union[Dict, List]:
        with open(path, 'r') as file:
            return json.load(file)
    
    # standard function I use for writing list of dicts to csv
    def write_csv(data: List[Dict], path: str) -> None:
        with open(path, 'w') as file:
            fields = set().union(*data)
            writer = csv.DictWriter(file, fieldnames=fields, lineterminator='\n')
            writer.writeheader()
            writer.writerows(data)
    
    json_data = read_json('your_file.json')
    
    # write the json data (dictionary) to a csv
    write_csv(json_data['data'], 'data.csv')
    

    注意json_data['data']的使用['data']部分访问了json响应的"data"键值

    【讨论】:

    • 感谢您的快速回复!但是,当我使用该函数时,我收到错误“NameError: name 'Union' is not defined”。我需要更改“-> Union[Dict, List]:”部分吗?
    • 哎呀,我好像忘记导入了,现在应该没问题了。这些只是类型注释,它们不会使代码的行为有任何不同,但它们确实使调试变得更容易,具体取决于您使用的 IDE
    猜你喜欢
    • 2018-11-14
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多