如何使用 Python 仅查找包含该月最后一天的日期的文件?
Posted
技术标签:
【中文标题】如何使用 Python 仅查找包含该月最后一天的日期的文件?【英文标题】:How can I find only the files that contains date for last day of the month, using Python? 【发布时间】:2021-11-12 07:30:43 【问题描述】:我有一个包含数百个 .xlsx 文件的文件夹,这些文件是多年前的每日数据。
文件名模式是'ABC DEF 20150501.xlsx'
我如何从这些年来每个月的最后一天挑选文件。
遗憾的是,我不知道该怎么做。
import pandas as pd
import re
files = [f for f in os.listdir(path) if re.match(r'ABC DEF [0-9]+.xlsx', f)]
df = pd.DataFrame(files)
df.columns = ['file_name']
df['port_date'] = df['file_name'].apply(lambda x : x.split(' ')[3].split('.')[0])
我只有一列中的日期,并且想不通!
任何帮助将不胜感激。
【问题讨论】:
你能有两个不同'ABC DEF'但日期相同的文件吗? no 'ABC DEF' 部分是固定的。只有 DATE 不同。 最后一个值,如果月份表示最后一个日历日,如31.dec
或每年 dec 月份的最后一个现有日期,每个月的名称类似。
基本上每个月存在的最后一个日期
【参考方案1】:
以下代码使用了一个函数,该函数将日期添加到日期,然后将新日期的月份与原始日期的月份进行比较,如果它们不同,则原始日期是该月的最后一天。
import pandas as pd
from datetime import datetime, timedelta
def last_day(to_date):
delta = timedelta(days=1)
next_day = to_date + delta
if to_date.month != next_day.month:
return True
return False
# read dummy filename data
df = pd.read_csv('test.csv')
df['port_date'] = pd.to_datetime(df['file_name'].str[8:16])
df['lastday'] = df['port_date'].apply(lambda dt: last_day(dt))
【讨论】:
【参考方案2】:如果需要每个月和年的最后一行提取日期时间,使用 GroupBy.last
按年和月进行排序和分组:
df = pd.DataFrame('file_name':['ABC DEF 20150501.xlsx',
'ABC DEF 20150701.xlsx',
'ABC DEF 20150711.xlsx'])
print (df)
file_name
0 ABC DEF 20150501.xlsx
1 ABC DEF 20150701.xlsx
2 ABC DEF 20150711.xlsx
df['port_date'] = pd.to_datetime(df['file_name'].str.extract('(\d+)\.', expand=False))
df = df.sort_values('port_date')
df = (df.groupby([df['port_date'].dt.year, df['port_date'].dt.month])
.last()
.reset_index(drop=True))
print (df)
file_name port_date
0 ABC DEF 20150501.xlsx 2015-05-01
1 ABC DEF 20150711.xlsx 2015-07-11
【讨论】:
【参考方案3】:声明一个函数:
def contains_date_of_last_day(name):
last_days = [
'0131',
'0228',
'0331',
'0430',
'0531',
'0630',
'0731',
'0831',
'0930',
'1031',
'1130',
'1231',
]
for i in last_days:
if i in name: return True
return False
使用函数检查是否包含最后一天的日期:
files = [f for f in os.listdir(path) if contains_date_of_last_day(f)]
【讨论】:
我有 SyntaxError: 'return' outside function 现在应该可以工作了以上是关于如何使用 Python 仅查找包含该月最后一天的日期的文件?的主要内容,如果未能解决你的问题,请参考以下文章