如何避免python代码中的重复?

如何避免python代码中的重复?,python,python-3.x,Python,Python 3.x,我在9棵不同的树上安装了一个仪器(树木计),数据是:日期和时间,增量和温度。我每个月去实地一次,下载更多的数据。现在我已经做了3次实地考察,因此我将文件称为“den11、den12、den13…”是与树相关的第一个数字(数字1),第二个与考察相关(1、2、3)。 在连接它们之前,我有一些例程要运行,最后只有9个(dendrom1、dendrom2、dendrom3…),所以我可以执行一些绘图和分析。但到目前为止,我已经做了很多复制和粘贴我的代码,这需要一段时间,很无聊,看起来很糟糕。我曾经尝试过

我在9棵不同的树上安装了一个仪器(树木计),数据是:日期和时间,增量和温度。我每个月去实地一次,下载更多的数据。现在我已经做了3次实地考察,因此我将文件称为“den11、den12、den13…”是与树相关的第一个数字(数字1),第二个与考察相关(1、2、3)。 在连接它们之前,我有一些例程要运行,最后只有9个(dendrom1、dendrom2、dendrom3…),所以我可以执行一些绘图和分析。但到目前为止,我已经做了很多复制和粘贴我的代码,这需要一段时间,很无聊,看起来很糟糕。我曾经尝试过for循环,但我是python新手,我自己学习,这部分我还没有破解

例如,要读取每个excel文件,我必须:

#Tree1
den11= pd.read_excel('den11.xlsx') 
den12= pd.read_excel('den12.xlsx') 
den13= pd.read_excel('den13.xlsx')

#Tree2
den21= pd.read_excel('den21.xlsx')
den22= pd.read_excel('den22.xlsx') 
den23= pd.read_excel('den23.xlsx')
...
#Tree9
然后,为了避免对九棵树中的每一棵树重复3次,我尝试重新创建每个文件名并将其分配给“f”:

trips = [1,2,3]
trees = range(1,10)
for tree in trees:
    for trip in trips:
         f = 'den' + str(tree) + str(trip)
         print(f)
然后我可以,也许读每一个,把它们的名字作为一个新的变量,但我显然不好,我在这里遗漏了一些东西:

os.chdir('...\Plantation\Dendrometers')
basepath = '...\Plantation\Dendrometers'
dlist = os.scandir(basepath)
for dendrometer in dlist:
    f = pd.read_excel(dendrometer)
(我用'os.scandir'代替'os.listdir',因为我读到scandir可以相互作用,我认为这可能是个问题)

它不起作用,然后我尝试分配一个包含所有文件名的列表:

flist = ['den11','den12','den13','den21','den22','den23','den31',
    'den32','den33','den41','den42','den43','den51','den52',
    'den53','den61','den62','den63','den71','den72','den73',
    'den81','den82','den83','den91','den92','den93']
这也不起作用,我想我不能使用turples执行功能

最好不要对每个文件重复基本例程,并为下一个数据做好准备?这就是我所做的,感觉很糟糕:

new_columns = ['date','increment','temp']
den11.columns = new_columns
den12.columns = new_columns
den13.columns = new_columns
den21.columns = new_columns
...

den11.set_index('date', inplace=True)
den12.set_index('date', inplace=True)
...

den11 = den11.loc['2019-02-14':]
den12 = den12.loc['2019-02-14':]
...

dendrom1 = pd.concat([den11,den12,den13])
...

dendrom1 = dendrom1.loc[~dendrom1.index.duplicated(keep='first')]
...dendrom9 = dendrom9.loc[~dendrom9.index.duplicated(keep='first')]

如果我只需要添加一个trip,用新的文件名加载文件夹,并为每棵树运行生成合并文件“dendrom”的代码,那就太棒了。

试试
os.listdir

d = {}
for i in os.listdir():
    if '.xlsx' in i:
        df = pd.read_excel(i)
        # do all your operations here that you do for every dataframe
        ...
        d[i] = df
要提取特定的数据帧,请使用:

print(d[excel file name])

然后它将输出您想要的数据帧。

观察良好;看起来确实很糟糕。更糟糕的是维护和扩展它:)相关:谢谢@U10转发!它适用于大多数操作。。。现在我正在尝试执行另一个循环来连接来自同一棵树的文件,例如:dendrom1=pd.concat([d['den11.xlsx'],d['den12.xlsx'],d['den13.xlsx'])),我想我只需要重复这一个(9次)。