我正在尝试在python中创建一个循环,该循环将允许我打开一个文件夹,遍历其中的子文件夹,读取json文件并将其输出为csv。然后为每个子文件夹重复循环。
我的目录如下所示:
主文件夹=“导出”
子文件夹=“文件夹1”,“文件夹2”等。
子文件夹中的文件=“ 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。
谢谢
让我们尝试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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句