Python 如何组合具有匹配结尾字符的文件?

Python 如何组合具有匹配结尾字符的文件?,python,pandas,operating-system,glob,Python,Pandas,Operating System,Glob,我的excel文件名为“name1 01.01.2018.xlsx”、“name1 01.01.2018.xlsx”、“name2 12.23.2019.xlsx”等等。我想加入所有具有匹配日期(最后10个字符)的文件 我可以通过以下方式加入他们: import glob import os import pandas os.chdir('filepath') files = [pd.read_excel(p, skipfooter=1) for p in glob.glob("*.xlsx"

我的excel文件名为“name1 01.01.2018.xlsx”、“name1 01.01.2018.xlsx”、“name2 12.23.2019.xlsx”等等。我想加入所有具有匹配日期(最后10个字符)的文件

我可以通过以下方式加入他们:

import glob
import os
import pandas

os.chdir('filepath')
files = [pd.read_excel(p, skipfooter=1) for p in glob.glob("*.xlsx")]
df = files[0].drop(files[0].tail(0).index).append([files[i].drop(files[i].tail(0).index) for i in range(1,len(files))])

如何仅在最后一个字符匹配时加入?我没有最后10个字符的选项列表,我希望它能自动更新。

首先,我们需要重新格式化代码。虽然连接数据帧的行是正确的,但它很难读取,并且可以更高效地完成:

import glob
import os
import pandas as pd

os.chdir('filepath')
files = [pd.read_excel(p, skipfooter=1) for p in glob.glob("*.xlsx")]

# drop the tail of all files
files = [f.drop(f.tail(0).index) for f in files]

# join all files
df = files[0].append(files[1:])
然后,我们需要对其进行一些更新,以便您可以检查加载的文件的文件名,并有一些方法将它们绑定到您创建的数据帧

import glob
import os
import pandas as pd

os.chdir('filepath')

# store last 10 characters of original filename
files = [(p[-10:], pd.read_excel(p, skipfooter=1)) for p in glob.glob("*.xlsx")]

# drop the tail of all files
files = [(p, f.drop(f.tail(0).index)) for p, f in files]

# group files by last 10 characters of filename
files = {p: [g for n, g in files if n == p] for p in set(p for p, f in files)}

# join all files with same last 10 characters
for key, value in files.items():
    files[key] = value[0].append(value[1:])

你说的加入是什么意思?你想把它们放在一起吗?或者彼此相邻?感谢您的回答和帮助清理代码。我用文件夹中的两个文件“name1 06.02.2019.xlsx”和“name2 06.02.2019.xlsx”尝试了它,files.keys()返回dict_key(['.2019.xlsx'])是因为点吗?无需担心,只要将10改为15就可以解决问题(“.xlsx”也算数)。谢谢大家!@卢安维埃拉查看第8行:这是决定关键的因素。看起来您实际上需要文件名的最后15个字符,而不是您所说的最后10个字符-记住,扩展名是文件名的一部分!实际上,只有当所有文件的最后15个字符都相同时,它才起作用。否则,我会在16中得到索引器回溯(最近一次调用last)#连接所有文件,并使用相同的最后10个字符17作为文件中的键和值。items():-->18个文件[key]=值[0]。追加(值[1:])