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

时间:2018-07-31 08:46:19

标签: python pandas

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

示例: 说每个子文件夹中有两个文件,分别为:4555432456。 因此,它们的路径类似于:

文件更多,这只是一个例子

C:\Users\user\Desktop\SHAPE\45554\INS\INS.shp
C:\Users\user\Desktop\SHAPE\45554\INB\INB.shp
C:\Users\user\Desktop\SHAPE\32456\INS\INS.shp
C:\Users\user\Desktop\SHAPE\32456\INB\INB.shp

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

这是我的代码:问题是它会合并所有文件而不是我提到的组。

import pandas as pd
import os
import glob

folder = path.Path(r"C:\Users\user\Desktop\SHAPE")
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')

1 个答案:

答案 0 :(得分:0)

您可以列出2个列表。一种用于“ 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)