python如何访问不同文件夹中的所有文件

时间:2017-06-20 08:15:22

标签: python pandas dataframe operating-system

我正在访问我定义的路径中的xls文件:

path = os.chdir('C:\\Users\\BKS\\Desktop\\python\\pk list')
files = os.listdir(path)
files_xls = [f for f in files if f[-3:] == 'xls']

df = [pd.read_excel(f, 'Sheet1')[['Exp. m/z','Intensity']] for f in files_xls]

然后我心想,如果xls文件被组织在不同的文件夹中怎么办?有没有办法将files_xls循环到文件夹中的每个文件?这意味着,访问文件夹然后循环遍历每个文件,然后转到下一个文件夹然后执行相同的操作?

我希望获取每个xls文件所在的文件夹的名称,并将它们合并到df中,如下所示:

Tag1  Tag2   Tag
1     1      A01.xls
2     1      A02.xls
3     2      A03.xls
4     2      A04.xls
5     3      A05.xls

这些xls文件将位于文件夹中:

'C:\\Users\\BKS\\Desktop\\python\\pk list\\20170620 Sample 1-48'

和其他一些xls文件将在另一个文件夹中:

'C:\\Users\\BKS\\Desktop\\python\\pk list\\20170620 Sample 49-96'

这些文件夹可能具有相同名称的xls文件,但其中包含不同的数据。所以我的目标是按顺序遍历pk list文件夹中的所有文件,并将文件夹的名称(例如20170620样本1-48)合并到df。让我们对上表说,这两个文件夹有A01~A05.xls:

Tag1  Tag2  Folder Name             Tag
1     1     20170620 Sample 1-48    A01.xls
2     1     20170620 Sample 1-48    A02.xls
3     2     20170620 Sample 1-48    A03.xls
4     2     20170620 Sample 1-48    A04.xls
5     3     20170620 Sample 1-48    A05.xls
1     1     20170620 Sample 49-96   A01.xls
2     1     20170620 Sample 49-96   A02.xls
3     2     20170620 Sample 49-96   A03.xls
4     2     20170620 Sample 49-96   A04.xls
5     3     20170620 Sample 49-96   A05.xls

1 个答案:

答案 0 :(得分:0)

你可以import glob并使用它:
(这严格假设您只有pk list文件夹下的子文件夹而没有文件。此外,第一个子文件夹中的所有文件都必须出现在其他子文件夹中)

import glob
import os

os.chdir("C:\\Users\\BKS\\Desktop\\python\\pk list\\20170620 Sample 1-48")
filenames = glob.glob("*.xls")
os.chdir("C:\\Users\\BKS\\Desktop\\python\\pk list")
foldernames = glob.glob("*")

for filename in filenames:
    df = []
    for foldername in foldernames:
        # merge according to your requirement
        df.append(pd.read_excel(f, 'Sheet1')[['Exp. m/z','Intensity']])
    # Use merged 'df' here