创建一个循环以打开文件夹中的子文件夹读取 json 文件并输出为 csv

我正在尝试在 python 中创建一个循环,它允许我打开一个文件夹,遍历其中的子文件夹,读取 json 文件并将它们输出为 csv。然后为每个子文件夹重复循环。


我的目录如下所示:


主文件夹 =“导出”


子文件夹 = "Folder1"、"Folder2" 等。


子文件夹中的文件 = "file1.json" 、 "file2.json" 等...


目前我正在子文件夹(例如“Folder1”)中运行以下代码来创建输出文件:


import pandas as pd

import os

path = os.getcwd()

frame = pd.DataFrame()

for filename in os.listdir(os.getcwd()):

    root, ext = os.path.splitext(filename)

    if ext == '.json':

        tmp_frame = pd.read_json(filename)

        frame = frame.append(tmp_frame, ignore_index=True)

        

frame.to_csv(os.path.join(path + ".csv"))


我的问题是如何运行该循环,但在主文件夹中它将打开每个子文件夹,然后运行该循环并将文件输出为每个子文件夹的 csv。


SMILET
浏览 81回答 1
1回答

德玛西亚99

让我们尝试pathlib从defaultdict标准库我们可以构建一个子文件夹字典作为键,所有文件作为列表中的值。from pathlib import Pathfrom collections import defaultdictyour_path = 'target_directory'file_dict = defaultdict(list)for each_file in Path(p).rglob('*.csv'): # change this to `.json`    file_dict[each_file.parent].append(each_file)print(file_dict)你的字典将是一个 Pathlib 对象的列表,它与这个有点相似,关键是子文件夹(我刚刚在这里打印了名称){Notebooks : [test.csv,             test_file.csv,             test_file_edited.csv] ,test_csv : [File20200610.csv,           File20201012 - Copy.csv,           File20201012.csv] }然后我们可以遍历字典并将每个对象保存到目标文件夹中。for each_sub_folder,files in file_dict.items():    dfs = []    for each_file in files:                j = pd.read_json(each_file) #your read method.        dfs.append(j) # append to list.     df = pd.concat(dfs)     df.to_csv(Path(target_path).joinpath(each_sub_folder.name + '.csv'),index=False)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python