Регулярное выражение Python: переименуйте все файлы, кроме тех, в названии которых указана сегодняшняя дата - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь переименовать все файлы в папке и удалить пробелы из имени файла. Все файлы имеют сегодняшнюю дату в формате YY-mm-dd. Ниже то, что мне удалось создать до сих пор.

Тем не менее, запуск, который дает мне «TypeError: запускается с первым аргументом, должен быть str или кортеж str, а не _sre.SRE_Pattern»

import os
import datetime
import re
today = datetime.datetime.now()
path = "/some/path/"
regex = re.compile(".*" + today.strftime("(%Y-%m-%d)") + ".*(.log$)", re.IGNORECASE)
for file in os.listdir(path):
    os.rename(file.startswith(regex), file.replace(" ","_")

Примечание. Мне известно, что в текущем состоянии он ищет сегодняшнюю дату, а не все даты, кроме сегодняшнего дня. Я оставил это как есть для тестирования и инвертирую соответствие регулярному выражению, как только оно заработает.

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Ваш file.startswith (regex) вернет либо True, либо False. Я думаю, что вы хотите переименовать файлы, которые соответствуют вашему регулярному выражению. Вам нужен еще один оператор "if" в вашем цикле for, чтобы проверить, начинается ли имя файла с регулярного выражения, тогда вам нужно запустить os.rename:

for file in os.listdir(path):
    if file.starstwith(regex):
        os.rename(file, file.replace(" ", "_"))
0 голосов
/ 07 ноября 2018

Похоже, что в ошибке правильный ответ, аргумент для startswith должен быть строкой, а не скомпилированным шаблоном регулярных выражений. Так что в основном это говорит о том, что startswith не может принимать шаблон регулярного выражения в качестве аргумента. Но, эй, это то, для чего нужно регулярное выражение!

Вы должны использовать шаблон регулярного выражения ^, чтобы обозначить начало строки, а затем сопоставить имя файла с этим шаблоном.

Вот пример:

...
regex = re.compile("^.*" + today.strftime("(%Y-%m-%d)") + ".*(.log$)", re.IGNORECASE)
for file in os.listdir(path):
     if regex.match(file): 
         # do something 
...