在 Python 中使用 datetime 的解决方案
import time
import datetime
def change_filename(fn):
# EXTRACT JUST THE TIMESTAMP AS A STRING
timestamp_str = fn[7:22]
# CONVERT TO UNIX TIMESTAMP
timestamp = time.mktime(datetime.datetime.strptime(timestamp_str, "%Y%m%d-%H%M%S").timetuple())
# SUBTRACT AN HOUR (3600 SECONDS)
timestamp = timestamp - 3600
# CHANGE BACK TO A STRING
timestamp_str = datetime.datetime.fromtimestamp(timestamp).strftime("%Y%m%d-%H%M%S")
# RETURN THE FILENAME WITH THE NEW TIMESTAMP
return fn[:7] + timestamp_str + fn[22:]
这考虑了通过将时间戳倒退一小时而可能发生的日、月和年的变化。如果您使用的是 12 小时制而不是 24 小时制,则可以改用格式字符串 "%Y%m%d-%I%M%S";见Python docs。
归功于:Convert string date to timestamp in Python 和 Converting unix timestamp string to readable date in Python
这假定您的 myCode 是固定长度的,如果不是,您可以使用 str.split 方法从 - 之后提取小时数,或者如果您的文件名有未知的数字/位置 @ 987654336@s,您可以查看使用regular expressions 来查找时间,并使用capturing groups 查找时间和replace。
在 Python 中,您可以结合使用 glob 和 shutil.move 来遍历文件并使用该函数重命名它们。如果目录/ies 中还有其他文件,您可能希望使用正则表达式来确保仅对匹配命名方案的文件进行操作。
简单的解决方案
上面有关于myCode 长度和文件名格式的注意事项。
如果您的时间戳使用 24 小时格式(00-23 小时),那么您可以通过减一来替换小时,如您所说;但是您必须使用条件来确保将23 转换为00,并注意将前导零添加到小于10 的小时数。
Python 中的一个例子是:
def change_filename(fn):
hh = int(fn[16:18])
if hh == 0:
hh = 23
else:
hh -= 1
hh = str(hh)
# ADD LEADING ZERO IF hh < 10
if len(hh) == 1:
hh = '0' + hh
return fn[:16] + str(hh) + fn[18:]
如上所述,要记住的重要一点是,如果小时为 00 并更改为 23,此方法不会将日期倒退 1,因此您还必须考虑到这一点。月份和年份也可能发生同样的情况,您必须将这些都考虑在内。最好使用datetime。