Я пытаюсь использовать смену нескольких имен файлов, используя группы регулярных выражений, но не могу заставить его работать (несмотря на то, что, как пишет regexr.com, должно быть допустимым оператором regex) , В 93000 файлов я в настоящее время есть все выглядит примерно так:Использование Regex для смены имен файлов с помощью Python
Mr. McCONNELL.2012-07-31.2014sep19_at_182325.txt
Mrs. HAGAN.2012-12-06.2014sep19_at_182321.txt
Ms. MURRAY.2012-06-18.2014sep19_at_182246.tx
И я хочу, чтобы выглядеть следующим образом:
20120731McCONNELL2014sep19_at_182325.txt
Но каждый раз, когда я бегу сценарий ниже, я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "changefilenames.py", line 11, in <module>
date = m.group(2)
AttributeError: 'NoneType' object has no attribute 'group'
Большое спасибо за помощь. Приносим извинения, если это глупый вопрос. Я только начинаю с RegEx и Python и, похоже, не могу понять этого.
import os
import re
from dateutil.parser import parse
for filename in os.listdir("."):
if filename.startswith("Mr."):
m = re.match("Mr.\s(\w*).(\d*-\d*-\d*).(\w*).txt", filename)
date = m.group(2)
name = m.group(1)
timestamp = m.group(3)
dt = parse(date)
new_filename = "{dt.year}{dt.month}{dt.day}".format(dt=dt) + name + timestamp + ".txt"
os.rename(filename, new_filename)
print new_filename
print "All done with the Mr"
if filename.startswith("Mrs."):
m = re.match("Ms.\s(\w*).(\d*-\d*-\d*).(\w*).txt", filename)
date = m.group(2)
name = m.group(1)
timestamp = m.group(3)
dt = parse(date)
new_filename = "{dt.year}{dt.month}{dt.day}".format(dt=dt) + name + timestamp + ".txt"
os.rename(filename, new_filename)
print new_filename
print "All done with the Mrs"
if filename.startswith("Ms."):
m = re.match("Mrs.\s(\w*).(\d*-\d*-\d*).(\w*).txt", filename)
date = m.group(2)
name = m.group(1)
timestamp = m.group(3)
dt = parse(date)
new_filename = "{dt.year}{dt.month}{dt.day}".format(dt=dt) + name + timestamp + ".txt"
os.rename(filename, new_filename)
print new_filename
print "All done with the Mrs"
EDIT Я изменил сценарий на основе предложений ниже, но я все еще получаю те же самые ошибки. Вот новый сценарий:
for filename in os.listdir("."):
m = re.search("(Mr|Mrs|Ms)\.\s(\w*)\.(\d*\-\d*\-\d*)\.(\w*)\.txt", filename)
date = m.group(2)
name = m.group(1)
timestamp = m.group(3)
dt = parse(date)
new_filename = "{dt.year}{dt.month}{dt.day}".format(dt=dt) + name + timestamp + ".txt"
os.rename(filename, new_filename)
print new_filename
Ни ваших регулярных выражений соответствует 'миссис HAGAN.2012-12-06.2014sep19_at_182321.txt', поэтому 're.match' возвращает' None'. Обратите внимание, что вы проверяете 'if filename.startswith (« Ms. »)', Но регулярное выражение соответствует 'Mrs.', а не' Ms.'. –