为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

SMILET 2023-03-08 15:18:44
我正在尝试在 python 中创建一个循环,它允许我打开一个文件夹,遍历其中的子文件夹,读取 json 文件并将它们输出为 csv。然后为每个子文件夹重复循环。我的目录如下所示:主文件夹 =“导出”子文件夹 = "Folder1"、"Folder2" 等。子文件夹中的文件 = "file1.json" 、 "file2.json" 等...目前我正在子文件夹(例如“Folder1”)中运行以下代码来创建输出文件:import pandas as pdimport ospath = 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。
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

让我们尝试pathlib从defaultdict标准库


我们可以构建一个子文件夹字典作为键,所有文件作为列表中的值。


from pathlib import Path

from collections import defaultdict


your_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)


查看完整回答
反对 回复 2023-03-08
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信