python - 从子目录中搜索 CSV 并将文件夹名称添加为列
问题描述
我想从我的工作目录中的不同子目录中读取 csv 以创建一个组合的 csv 文件。组合的 csv 应该有一列包含从中读取特定 csv 的子目录名称。
这是我尝试过的。
import os
import glob
import pandas as pd
all_filenames = [i for i in glob.glob('*/*.csv'),recursive=True)]
list_subfolder = [f.name for f in os.scandir(ride_path) if f.is_dir()]
df_list = []
for i in range(len(all_filenames)):
dir_name = list_subfolder[i]
current_csv = all_filenames[i]
data = pd.read_csv(current_csv)
data["sub_folder"]= dir_name
df_list.append(data)
combined_df = pd.concat(df_list)
combined_df.to_csv("combined_csv.csv", index=False)
问题在于,它添加了其中没有 csvs' 的子目录,这是错误且有问题的。实现这一权利的最佳方法是什么。
解决方案
您可以通过pathlib
模块执行此操作:
from pathlib import Path
inp_path = Path('.') # specify the inp path. Here, ('.') means current working dir
df_list= []
for csv_file in inp_path.glob('**/*.csv'): # glob here will return generator obj which will yield csv file one by one
df = pd.read_csv(csv_file)
df['file_name'] = csv_file.parent # possible to get parent dir via pathlib
df_list.append(df_list)
combined_df = pd.concat(df_list)
combined_df.to_csv("combined_csv.csv", index=False)
Note
.
1- csv_file.parent.name
如果您只需要名称,请使用。
2- csv_file.parent.absolute()
如果您想要父目录的完整路径,请使用。
推荐阅读
- hybris - 是否可以在 Backoffice 搜索中加载超过 50 个结果?
- javascript - 有什么方法可以将颜色变化的网格动画到文本上?
- mysql - 为什么存储过程总是在mysql中返回0
- javascript - Javascript 搜索框和字符计数器
- css - 如何删除表格单元格中的顶部填充
- python-3.x - 在小部件创建自动调整大小时继承子帧(tkinter,python 3)
- reactjs - 是否有用于拖放扩展面板的 React Native 实用程序?
- git - 如何检查两个分支是否更改了同一行(自动)
- laravel - 更改图像名称并保存到 DB Laravel
- node.js - pathspec 的标准版本 changeLog 生成问题