我有一个包含多个JSON文件的文件夹。下面是一个示例JSON文件(所有JSON文件具有相同的结构):
{
"url": "http://www.lulu.com/shop/alfred-d-byrd/in-the-fire-of-dawn/paperback/product-1108729.html",
"label": "true",
"body": "SOME TEXT HERE",
"ids": [
"360175950098468864",
"394147879201148929"
]
}
**我只想提取ids
并将其写入CSV文件。**以下是我的代码:
import pandas as pd
import os
from os import path
import glob
import csv
import json
input_path = "TEST/True_JSON"
for file in glob.glob(os.path.join(input_path,'*.json')):
with open(file,'rt') as json_file:
json_data = pd.read_json(json_file) #reading json into a pandas dataframe
ids = json_data[['ids']] #select only "response_tweet_ids"
ids.to_csv('TEST/ids.csv',encoding='utf-8', header=False, index=False)
print(ids)
问题:上面的代码将一些id写入CSV文件。但是,它不会返回所有的ID。此外,输出CSV文件(ids.csv)中有一些id在我的任何JSON文件中都不存在!
3条答案
按热度按时间oewdyzsn1#
另一种方法是为文件夹中的所有ID创建公共列表,并仅将其写入输出文件一次,此处示例:
请阅读@lemonhead的answer以获取更多详细信息。
hiz5n14c2#
我认为你有两个主要问题:
要查看此内容,请执行以下操作:
注意
394147879201148929
的关闭一个错误! AFAIK,在你的例子中避免这种情况的一个快速方法就是告诉pandas
以字符串的形式读取所有内容,例如:1.您正在循环访问json文件,并将每个文件写入同一个csv文件。但是,默认情况下,pandas是以'w'模式打开文件,这将覆盖文件中以前的任何数据。如果您以追加模式('a')打开,那么应该会达到您的预期效果
在上下文中:
总的来说,除非你在这里从
pandas
中获得其他东西,为什么不直接使用原始json
和csv
库呢?下面的代码将在没有pandas
依赖项的情况下执行相同的操作:3mpgtkmj3#
默认情况下,
dataframe.to_csv()
会覆盖该文件。因此,每次执行循环时,您都将该文件替换为该输入文件中的ID,最终结果是最后一个文件中的ID。使用
mode='a'
参数追加到CSV文件,而不是覆盖。