如何将文件和匹配的结束字符组合在一起?

时间:2019-05-15 21:06:58

标签: python pandas operating-system glob

我有名为“ name1 01.01.2018.xlsx”,“ name1 01.01.2018.xlsx”,“ name2 12.23.2019.xlsx”之类的excel文件,依此类推。我想加入所有匹配日期(最后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个字符的选项列表,我希望它自动更新。

1 个答案:

答案 0 :(得分:1)

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

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:])