2017-06-20 75 views
0

我目前访问路径中的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文件组织在不同的文件夹?有没有办法file_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˚F iles具有相同的名称,但具有不同的数据。所以我的目标是按顺序遍历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 
+3

请熟悉'os.walk'函数。 –

回答

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