2016-01-27 16 views
1

上的文件名字符串我有在他们的CSV文件多个文件夹,和我创建笛卡尔名单和运行上的所有文件组合的一些统计数据。功能从而改变基于列表

到目前为止,我喜欢这个执行此:

import pandas as pd 
import os 
import scipy as sp 
from scipy import stats 
import glob 
import itertools 
# 
# 
path =r'F:\Sheyenne\Statistics\IDL_stats\NDVI' # use your path 
allfiles = glob.glob(path + "/*.csv") 
result = list(itertools.product(allfiles,allfiles)) 
# 
dataframe=[] 
for files in result: 
    x=(pd.read_csv(files[0], names = ['Percent', 'Value'])) 
    z=x.Percent 
    y=(pd.read_csv(files[1], names = ['Percent', 'Value'])) 
    d=y.Percent 
    stats2=sp.stats.ks_2samp(z,d) 
    g=files, stats2 
    df=pd.DataFrame(data=list(sum(g,())), index=['File1', 'File2', 'D', 'p_value']).transpose() 
    dataframe.append(df) 
df=pd.concat(dataframe) 
print df 

但我的问题是我有多个文件夹,我需要一个途径中浏览到。所以r'F:\Sheyenne\Statistics\IDL_stats\NDVI'只是众多文件夹我需要在执行此代码之一。有没有一种方法来创建一个函数,改变路径的字符串做到这一点?因此,如果一个文件夹位置是r'F:\Sheyenne\Statistics\IDL_stats\NDII'和我有名字NDVINDII我要自动执行它通过简单地改变基于通路内的字符串(仅r'F:\Sheyenne\Statistics\IDL_stats\后的部分)上运行的下一个文件夹相同的代码清单列表中的项目。

我希望是有道理的。

回答

1

创建一个函数:

def get_df(path): 
    allfiles = glob.glob(path + "/*.csv") 
    result = list(itertools.product(allfiles,allfiles)) 
    # 
    dataframe=[] 
    for files in result: 
     x=(pd.read_csv(files[0], names = ['Percent', 'Value'])) 
     z=x.Percent 
     y=(pd.read_csv(files[1], names = ['Percent', 'Value'])) 
     d=y.Percent 
     stats2=sp.stats.ks_2samp(z,d) 
     g=files, stats2 
     df=pd.DataFrame(data=list(sum(g,())), index=['File1', 'File2', 'D', 'p_value']).transpose() 
     dataframe.append(df) 
    return pd.concat(dataframe) 

,并用它为您的所有路径:

import os 

paths = [os.path.join(r'F:\Sheyenne\Statistics\IDL_stats', name) 
     for name in ['NDVI', 'NDII']] 
dfs = [get_df(path) for path in paths] 
0

更好的想法:只是包装在一个循环的原件。

for folder in ('NDVI', 'NDII'): 
    path =r'F:\Sheyenne\Statistics\IDL_stats\' + folder 
    ... 
0

你可以包装在以下类型的循环代码:

import os 

root_path = r'F:\Sheyenne\Statistics\IDL_stats' 
folders = ['NDVI', 'NDII'] 

for folder in folders: 
    path = os.path.join(root_path, folder, '*.csv') 
    print path 
    allfiles = glob.glob(path) 

os.path.join正确连接任何数量的部件在一起,形成适合您的操作系统的有效路径。这将显示以下的输出:

F:\Sheyenne\Statistics\IDL_stats\NDVI\*.csv 
F:\Sheyenne\Statistics\IDL_stats\NDII\*.csv