【发布时间】:2019-04-08 17:24:34
【问题描述】:
我有一整套文件 (10.000+),文件名中包含日期和时间。问题是日期和时间没有补零,导致排序出现问题。
文件名格式为:output 5-11-2018 9h0m.xml
我想要的格式是:output 05-11-2018 09h00m.xml
我搜索了不同的解决方案,但大多数似乎都使用拆分字符串然后重新组合它们。这似乎很麻烦,因为在我的情况下,日、月、小时和分钟需要分开,填充然后重新组合。
我认为正则表达式可能会给我一些更好的解决方案,但我无法完全弄清楚。
我已经根据 Wiktor Stribiżew 的建议编辑了我的原始代码,即您不能在替换中使用正则表达式并改为使用组:
import os
import glob
import re
old_format = 'output [1-9]-11-2018 [1-2]?[1-9]h[0-9]m.xml'
dir = r'D:\Gebruikers\<user>\Documents\datatest\'
old_pattern = re.compile(r'([1-9])-11-2018 ([1-2][1-9])h([0-9])m')
filelist = glob.glob(os.path.join(dir, old_format))
for file in filelist:
print file
newfile = re.sub(old_pattern, r'0\1-11-2018 \2h0\3m', file)
os.rename(file, newfile)
但这仍然不能完全按照我的意愿运行,因为它不会改变 10 小时以下的时间。我还能尝试什么?
【问题讨论】:
-
您不能在替换中使用正则表达式,在替换中使用正则表达式中的组和
\1、\2等占位符来引用这些值。请参阅re.subdocs。 -
谢谢,这至少为我指明了正确的方向。这帮助我制定了一个可以更改至少部分文件名的 re.sub。但我真的很想找到一个解决方案,根据已经存在的位数(所以 1 -> 01 和 12 -> 12)对所有内容进行零填充。你还有更多指点吗?
-
用
r'0\1-11-2018 \2h0\3m'代替lambda x: '{}-11-2018 {}h{}m'.format(x.group(1).zfill(2), x.group(2).zfill(2), x.group(3).zfill(2))
标签: python regex rename filenames