2017-06-20 76 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