【问题标题】:Only writing first line to CSV - don't understand why只将第一行写入 CSV - 不明白为什么
【发布时间】:2018-05-10 00:51:50
【问题描述】:

我需要将多个 JSON 文件转换为 CSV 文件。我有一个包含 2000 个 .JSON 文件的 data.zip 文件夹。我能够加载 JSON 文件并打印每个 JSON 文件中的数据,并且打印标准化。但是当我将它写入 CSV 时,它只显示 1 行数据。如何将所有 .JSONS 数据写入 CSV 文件。

import zipfile
from pandas.io.json import json_normalize

def get_text():
    with zipfile.ZipFile("data.zip", "r") as z:
         for filename in z.namelist():
             with z.open(filename) as f:
                  data = json.load(f)
                  normalized = json_normalize(data)
                  print normalized
                  normalized.to_csv('data.csv', encoding="utf-8-sig")

【问题讨论】:

标签: python json pandas csv zipfile


【解决方案1】:

.to_csv 的默认设置是写入一个新文件。您需要附加-mode='a'。见:

Panda's Write CSV - Append vs. Write

【讨论】:

  • 非常感谢。我花了 12 个小时调试这个。你是救生员。
【解决方案2】:

正如一些人解释的那样,您正在覆盖您的 CSV 文件,而不是附加它。第一次尝试附加并只编写标题。

这是一个例子:

def get_text():
    add_csv_header = True
    with zipfile.ZipFile("data.zip", "r") as z:
         for filename in z.namelist():
             with z.open(filename) as f:
                  data = json.load(f)
                  normalized = json_normalize(data)
                  print normalized
                  normalized.to_csv('data.csv', encoding="utf-8-sig", mode='a', header=add_csv_header)
                  add_csv_header = False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    相关资源
    最近更新 更多