2016-06-14 2 views
0

나는 여러 하위 디렉토리 (더 많은 폴더)가 있고 각 하위 디렉토리에는 csv 파일이 있습니다. 하위 디렉토리의 모든 CSV 파일에 동일한 코드를 적용하고 싶습니다. 난 그냥 하나 개의 폴더에 대한 이런 짓을하면 내가 이런 식으로 할 것 :이 경우 G:\Stefano\Ecoregion_assessment\csv_by_ecoregion_crp여러 폴더에있는 여러 파일에 동일한 코드 적용

list1=[] 
pth=r'G:\Stefano\Ecoregion_assessment\csv_by_ecoregion_crp\05f08_46e' 
for f in os.listdir(pth): 
    out=r'G:\Stefano\Ecoregion_assessment\final_files' 
    df=pd.read_csv(os.path.join(pth,f)) 
    columns=['Percent', 'Land_Use', 'LC_Source'] 
    df=df[columns] 
    df['Land_Use2']=df.Land_Use 
    df.rename(columns={'Percent': 'Percent_' +df.iloc[1,2], 'Land_Use': 'Land_Use_' +df.iloc[1,2]} , inplace=True) 
    df.drop(['LC_Source'], inplace=True, axis=1) 
    list1.append(df) 
    df_final = reduce(lambda left,right: pd.merge(left,right,on=['Land_Use2'], how='outer'), list1) 
df_final.to_csv(os.path.join(out,'05f08_46e.csv')) 

모든 서브 디렉토리로 이동하고 05f08_46e 서브 디렉토리 중 하나 인 루트입니다. 이 동일한 코드를 함수를 사용하여 루트 내의 모든 폴더에 적용한 후 파일을 out으로 보내고 반복되는 특정 하위 디렉터리의 이름을 보내려고합니다. G:\Stefano\Ecoregion_assessment\csv_by_ecoregion_crp 내에 20 개의 폴더가 있으므로 끝에 20 개의 출력 파일을 G:\Stefano\Ecoregion_assessment\final_files에 넣고 싶습니다. 나는 폴더 경로를 수동으로 변경하지 않고 모든 20 개의 폴더에 작성한 코드를 적용하기 만하면됩니다.

이 방법에 접근하는 또 다른 방법은 os.walk을 사용하는 것이지만 아직 성공하지 못했습니다.

답변

1

추가 루프를 추가하기 만하면됩니다. 일부 부품이 누락 되어도 테스트 할 수 없지만 코드를 다시 작성하려고 시도했지만이를 테스트 할 수는 없지만 상당히 확신합니다 :

pth=r'G:\Stefano\Ecoregion_assessment\csv_by_ecoregion_crp' # upper dir 
out=r'G:\Stefano\Ecoregion_assessment\final_files' # out of the loop 

for d in os.listdir(pth): 
    # 05f08_46e will be one of the "d" values 
    for f in os.listdir(os.path.join(pth,d)): 
     df=pd.read_csv(os.path.join(pth,f)) 
     columns=['Percent', 'Land_Use', 'LC_Source'] 
     df=df[columns] 
     df['Land_Use2']=df.Land_Use 
     df.rename(columns={'Percent': 'Percent_' +df.iloc[1,2], 'Land_Use': 'Land_Use_' +df.iloc[1,2]} , inplace=True) 
     df.drop(['LC_Source'], inplace=True, axis=1) 
     list1.append(df) 
     df_final = reduce(lambda left,right: pd.merge(left,right,on=['Land_Use2'], how='outer'), list1) 
    df_final.to_csv(os.path.join(out,d+'.csv')) 
관련 문제