首页 > 解决方案 > 返回来自不同文件夹的文件的绝对路径

问题描述

我想编写一个返回文件绝对路径的函数。文件夹的结构如下所示:

2020
    02
      01
        .csv
      02
        .csv
      03
        .csv
      ..
    03
    ..

年 -> 月 -> 日 - csv 文件

该函数需要从当天获取最后 7 个带有 x-2 的文件。示例:如果今天是 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-3.x

解决方案


好问题。日期逻辑可能很难自己实现,因为可能存在许多使逻辑复杂化的异常。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 格式化日期以获取适当的字符串。


推荐阅读