首页 > 解决方案 > 带日期的文件名。需要使用一年中最后一个月的日期的文件名存储文件

问题描述

嗨,我试过但无法理解逻辑。我有一个包含许多文件(csv)的文件夹,它们的格式都是从 oct2020 到 sept2021。但有些文件也缺少月份数据。文件名的格式是

eg: ['20201117_KR_App Download - NBA Draft.csv',
 '20210130_KR_Get Out The Vote #2_International.csv',
 '20210204_KR_Get Out The Vote #4_International.csv',
 '20210430_KR_iLP Newsletter #1_Active Subs.csv',
 '20210514_KR_Last Weekend 15 Games_Email_MAN_Promo_ILP_ACQ_PRO_Global_EN.csv',
 '20210605_KR_Playoffs2ndRdGm1_Email_MAN_Offer_ILP_ACQ_PRO_Global_EN.csv',
 '20210706_KR_Playoffs4thRdGm1_Email_MAN_Tune-in_ILP_RET_SUBS_Global_EN.csv']

文件名中的数字是日期,因此 20201117 表示 2020-11-17,格式为 %y%m%d。我想在一个数据框中检索 2020 年最后一个月的文件,并在文件夹中存在的其他数据框中检索 2021 年最后一个月的文件。我们如何在 python 中实现这一点。

我所做的是检索文件夹中的所有文件

'''
          country='SouthKorea'
          files = pd.Series(os.listdir('../input/' + country))
          # second, iterate over dates
          for date in pd.date_range('2020-10-01', '2021-09-30', freq='MS').strftime('%Y%m%d'):
              for file_name in files[files.str.contains(date)]:
                  print(file_name)
'''

请让我知道如何实现这一目标。

标签: pythonpandasdataframenumpypython-datetime

解决方案


您可以获得以特定年份开头的所有文件的列表,并且由于它是 YYYMMDD 的形式,因此只需从该列表中获取最大值:

files = ['20201117_KR_App Download - NBA Draft.csv',
 '20210130_KR_Get Out The Vote #2_International.csv',
 '20210204_KR_Get Out The Vote #4_International.csv',
 '20210430_KR_iLP Newsletter #1_Active Subs.csv',
 '20210514_KR_Last Weekend 15 Games_Email_MAN_Promo_ILP_ACQ_PRO_Global_EN.csv',
 '20210605_KR_Playoffs2ndRdGm1_Email_MAN_Offer_ILP_ACQ_PRO_Global_EN.csv',
 '20210706_KR_Playoffs4thRdGm1_Email_MAN_Tune-in_ILP_RET_SUBS_Global_EN.csv']



years = ['2020','2021']
for year in years:
    # Get all files that start with year
    result = max([i for i in files if i.startswith(year)])
    print(result)

输出:

20201117_KR_App Download - NBA Draft.csv
20210706_KR_Playoffs4thRdGm1_Email_MAN_Tune-in_ILP_RET_SUBS_Global_EN.csv

推荐阅读