按最后一个子文件夹的名称合并文件



我想按最后一个子文件夹的名称合并所有文件。

示例:假设我从每个名为4555432456的子文件夹中有两个文件。因此,他们的路径如下:

还有更多的文件这只是的一个例子

C:UsersuserDesktopSHAPE45554INSINS.shp
C:UsersuserDesktopSHAPE45554INBINB.shp
C:UsersuserDesktopSHAPE32456INSINS.shp
C:UsersuserDesktopSHAPE32456INBINB.shp

所以我需要将所有的INB文件合并为一个,将所有的INS文件合并成一个。

这是我的代码:问题是它在所有文件中进行合并,而不是在我提到的组中。

import pandas as pd
import os
import glob
folder = path.Path(r"C:UsersuserDesktopSHAPE")
files = []
for fil in glob.iglob('**/Desktop/SHAPE/**/' ,recursive = True):
files.append(pd.read_table(fil).assign(col = get_folder(fil))) #needs group by somehow
gdf = pd.concat(files, sort = True)   #concatenate files
gdf.to_csv(folder / 'compiled')

您可以创建两个列表。一个用于"INB",一个用于"INS":

INB = [], INS = []
for fil in glob.iglob('**/Desktop/SHAPE/**/' ,recursive = True):
df = pd.read_table(fil).assign(col = get_folder(fil))
if fil.endswith('INS.shp'):
INS.append(df)
else:
INB.append(df)
INB_df = pd.concat(INB).to_csv('INB.csv')
INS_df = pd.concat(INS).to_csv('INS.csv')

对于多个类别,请使用字典。例如:

import os
from collections import defaultdict
d = defaultdict(list)
for fil in glob.iglob('**/Desktop/SHAPE/**/' ,recursive = True):
df = pd.read_table(fil).assign(col = get_folder(fil))
d[os.path.basename(fil)].append(df)
for cat, lst in d.items():
pd.concat(lst).to_csv(cat)

最新更新