打开文件名中日期戳早于 3 天的文件 - Python 2.7

Open files older than 3 days of date stamp in file name - Python 2.7

** 问题** 我正在尝试打开(在 python 中)早于当前名称中的日期戳 3 天的文件。示例:2016_08_18_23_10_00 - JPN - MLB - 米老鼠 v Burgerface.ply。到目前为止,我可以创建一个日期变量,但是我不知道如何在文件名中搜索这个变量。我想我需要先将它转换成字符串?

from datetime import datetime, timedelta
import os
import re
path = "C:\Users\michael.lawton\Desktop\Housekeeper"

## create variable d where current date time is subtracted by 3 days ##

days_to_subtract = 3
d = datetime.today() - timedelta(days=days_to_subtract)

print d

## open file in dir where date in filename = d or older ##

for filename in os.listdir(path):
if re.match(d, filename):
    with open(os.path.join(path, filename), 'r') as f:
        print line,

任何帮助将不胜感激

您可以为此使用 strptime。它会将您的字符串(假设其格式正确)转换为日期时间对象,您可以使用该对象根据文件名比较文件是否超过 3 天:

from datetime import datetime

...

lines = []
for filename in os.listdir(path):
  date_filename = datetime.strptime(filename.split(" ")[0], '%Y_%m_%d_%H_%M_%S')
  if date_filename < datetime.datetime.now()-datetime.timedelta(days=days_to_subtract):
    with open(os.path.join(path, filename), 'r') as f:
      lines.extend(f.readlines()) # put all lines into array

如果文件名是 2016_08_18_23_10_00 - JPN - MLB - Mickeymouse v Burgerface.ply,日期时间部分将用 filename.split(" ")[0] 提取。然后我们可以使用 datetime.timedelta

来检查它是否超过三天

要打开给定目录中名称中包含早于 3 天的时间戳的所有文件:

#!/usr/bin/env python2
import os
import time

DAY = 86400 # POSIX day in seconds
three_days_ago = time.time() - 3 * DAY
for filename in os.listdir(dirpath):
    time_string = filename.partition(" ")[0]
    try:
        timestamp = time.mktime(time.strptime(time_string, '%Y_%m_%d_%H_%M_%S'))
    except Exception: # can't get timestamp
        continue
    if timestamp < three_days_ago: # old enough to open
        with open(os.path.join(dirpath, filename)) as file: # assume it is a file
            for line in file:
                print line,

代码假设时间戳在当地时区。在 C mktime() 可以访问 the tz database 的平台上,它可能会考虑 DST 转换(如果在您的情况下文件是 72 小时还是 73 小时都无关紧要,那么请忽略本段)。

考虑使用 "the last modification time of a file" 等文件元数据,而不是从其名称中提取时间戳:timestamp = os.path.getmtime(path).