[英]Return the absolute path to files from different folders
我想编写一个函数来返回文件的绝对路径。 文件夹的结构如下所示:
2020
02
01
.csv
02
.csv
03
.csv
..
03
..
年 -> 月 -> 日 - csv 文件
该函数需要从当天的 x-2 中获取最后 7 个文件。 示例:如果今天是 3 月 20 日,我需要从 3 月 11 日到 17 日提交文件。 这是简单的部分,但我现在陷入困境,以防我需要从两个月开始获取文件。 例如今天是 3 月 3 日,我需要 2 月 23 日至 29 日,或者今天是 3 月 4 日,我需要 2 月 24 日至 3 月 1 日。 到目前为止,这是我的功能:
currentDay = '05'
currentMonth = '03'
currentYear = '2020'
start_day = int(currentDay) - 9
end_day = int(currentDay) - 2
# print(start_day)
file_path = Path('C:\\Users\\my_files')
paths = []
l = []
for year in os.listdir(file_path):
if currentMonth == '01' and start_day < 0:
file_path = os.path.join(file_path, str(int(currentYear)-1))
else:
file_path = os.path.join(file_path, currentYear)
for month in os.listdir(file_path):
if start_day < 0:
file_path = os.path.join(file_path, "0"+str(int(currentMonth)-1)+"\\")
else:
file_path = os.path.join(file_path, currentMonth)
for day in range(start_day, end_day):
paths.append(os.path.join(file_path, '{:02d}'.format(day)+"\\"))
我开始编写一些 if-else 条件,但似乎无法理解如何从文件不是当月的文件返回路径。
预期输出:
'C:\\Users\\my_files\\2020\\02\\29\\'
'C:\\Users\\my_files\\2020\\03\\01\\'
And so on..
很好的问题。 日期逻辑可能很难自己实现,因为可能存在许多使逻辑复杂化的异常。 Python 有一个名为datetime
的模块,它使这个过程变得更容易,因为其他人已经实现了一个月、一年和潜在的闰年中有多少天。
使用datetime
,您可以很容易地获得这一天
import datetime
a_week_ago = datetime.datetime.now() - datetime.timedelta(days=7)
现在,您需要将日期对象转换为适合您的文件结构的字符串。 这里有很多选择,这是一个建议:
import datetime
new_date = datetime.datetime.now() - datetime.timedelta(days=7)
prefix = r"C:\\Users\\my_files\\"
new = prefix + new_date.strftime(r"%Y\\%m\\%d\\")
print(new)
然后你可以把它放在一个循环中并修改天数,使其不是 7,而是向后循环。
import datetime
number_of_days = 7
file_path = Path('C:\\Users\\my_files')
for i in range(number_of_days):
new_date = datetime.datetime.now() - datetime.timedelta(days=i)
year = new_date.strftime("%Y")
month = new_date.strftime("%m")
day = new_date.strftime("%d")
file_path = os.path.join( year, month, day)
print(file_path)
您可以看到我如何使用此处的指南使用 strtime 格式化日期以获取适当的字符串。
只是扩展了你的代码.. 编写一个函数,返回真或假,名称为leap_year 我只是使用leap_year 作为条件。 试试看:
currentDay = '05'
currentMonth = '03'
currentYear = '2020'
start_day = int(currentDay) - 9
end_day = int(currentDay) - 1
# print(start_day)
file_path = Path('C:\\Users\\my_files'
paths = []
l = []
for year in os.listdir(file_path):
if currentMonth == '01' and start_day < 0:
file_path = os.path.join(file_path, str(int(currentYear)-1))
else:
file_path = os.path.join(file_path, currentYear)
for month in os.listdir(file_path):
if start_day < 0 and currentMonth in ['10', '11','12']:
file_path = os.path.join(file_path, "0"+str(int(currentMonth)-1)+"\\")
elif start_day < 0:
file_path = os.path.join(file_path, str(int(currentMonth)-1)+"\\")
else:
file_path = os.path.join(file_path, currentMonth)
if int(currentDay) < 9 :
if currentMonth == '03':
max_days = 29 if leap_year else 28
for day in range(1, end_day):
paths.append(os.path.join(file_path, '{:02d}'.format(day)+"\\"))
for days in range (max_days, max_days-9-int(currentDay)-1, -1):
paths.append(os.path.join(file_path, '{:02d}'.format(day)+"\\"))
if currentMonth in ['01','02', '04', '06', '08', '09', '11']:
max_days = 31
for day in range(1, end_day):
paths.append(os.path.join(file_path, '{:02d}'.format(day)+"\\"))
for days in range (max_days, max_days-9-int(currentDay)-1, -1):
paths.append(os.path.join(file_path, '{:02d}'.format(day)+"\\"))
if currentMonth in ['05', '07', '10','12']:
max_days = 30
for day in range(1, end_day):
paths.append(os.path.join(file_path, '{:02d}'.format(day)+"\\"))
for days in range (max_days, max_days-9-int(currentDay)-1, -1):
paths.append(os.path.join(file_path, '{:02d}'.format(day)+"\\"))
else:
for day in range(start_day, end_day):
paths.append(os.path.join(file_path, '{:02d}'.format(day)+"\\"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.