2016-06-14 21 views
0

私は多数のサブディレクトリ(さらにフォルダ)を持つフォルダを持ち、各サブディレクトリにはcsvファイルがあります。サブディレクトリ内のすべてのcsvファイルに同じコードを適用したいと思います。私はこのようにそれを行うだろうただ一つのフォルダのためにこれをしなかった場合:この場合には複数のフォルダ内の複数のファイルに同じコードを適用する

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')) 

G:\Stefano\Ecoregion_assessment\csv_by_ecoregion_crpは、すべてのサブディレクトリに移動し、05f08_46eは、サブディレクトリの1つであるルートです。私はこの同じコードを機能を使用してルート内のすべてのフォルダに適用してから、outにファイルdf_finalとループしている特定のサブディレクトリの名前を送信します。私はG:\Stefano\Ecoregion_assessment\csv_by_ecoregion_crpの中に20のフォルダを持っているので、最後にG:\Stefano\Ecoregion_assessment\final_filesに20の出力ファイルを持っていたいと思います。私は、フォルダパスを手動で変更せずに、私が書いたコードを20のフォルダすべてに適用したいだけです。

これにアプローチするもう1つの方法は、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')) 
関連する問題