包含许多文件,其名称使用以下格式对时间戳进行编码
MMDDYYYY_HHMMSS
例如,第一个文件的名称包含时间戳 May 11th, 2023, 08:01:34.
我需要的是一个带签名的函数
def get_files_between(starttime,endtime):
返回开始时间和结束时间之间的所有文件名,其中开始时间和结束时间以小时和分钟给出。
例如,
get_files_between("0801","0802")
应该回来
['f_sometext_05112023_080134.csv','f_sometext_05112023_080155.csv','f_sometext_05112023_080218.csv','f_sometext_05112023_080225.csv']
对于像 08:01 这样的一分钟间隔,使用 glob 实现类似的东西真的很容易:
import glob
files = glob.glob(pathname="Files/f_*_*_0801*.csv")
print(files)
如何将此代码推广到包含几分钟的时间间隔?
我会这样做:
from pathlib import Path
def get_files_between(starttime, endtime):
out = [f.name for hm in [starttime, endtime] #`hm` for hour-minute
for f in Path("Files").glob(f"f_*_{hm}*.csv")] #adjust the pattern if needed
return out
输出:
get_files_between("0801", "0802")
['f_sometext_05112023_080134.csv',
'f_sometext_05112023_080155.csv',
'f_sometext_05112023_080218.csv',
'f_sometext_05112023_080225.csv']
timedelta
:
from datetime import datetime, timedelta
def get_files_between(starttime, endtime):
s, e = datetime.strptime(starttime, "%H%M"), datetime.strptime(endtime, "%H%M")
hmins = [(s + timedelta(minutes=i)).strftime("%H%M")
for i in range((e-s).seconds//60+1)]
out = [f.name for hm in hmins for f in Path("Files").glob(f"f_*_{hm}*.csv")]
return out
输出:
get_files_between("0800", "0802")
['f_sometext_05112023_080001.csv',
'f_sometext_05112023_080134.csv', # <-- not retrieved by the 1st approach!
'f_sometext_05112023_080155.csv', # <-- not retrieved by the 1st approach!
'f_sometext_05112023_080218.csv',
'f_sometext_05112023_080225.csv']
使用的树:
Files
┣━━ f_sometext_05112023_080001.csv # <-- added by me to test the `timedelta` approach
┣━━ f_sometext_05112023_080134.csv
┣━━ f_sometext_05112023_080155.csv
┣━━ f_sometext_05112023_080218.csv
┣━━ f_sometext_05112023_080225.csv
┣━━ f_sometext_05112023_080323.csv
┗━━ f_sometext_05112023_080455.csv