Python - дважды переименовывать файлы с помощью os

1

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

Этот файл называется APR30CaseRVU-1Day.txt. Мне нужно, чтобы это было в форме refAPRCaseRVU-1Day.txt.

Добавить ref, удалить 30, сохранить 1Day.

Скрипт отлично работает для других файлов, у которых нет этого дополнительного "1Day". Я новичок, поэтому я уверен, что мой рабочий процесс - дерьмо, но моя идея заключалась в том, чтобы использовать os.rename дважды. Как только вы удалите символы, а затем разделите на дефис, чтобы добавить "1" обратно в имя файла, но когда я печатаю имя файла после первого os.rename, у него все еще есть 30 и 1.

У кого-нибудь есть советы, чтобы сделать это более эффективно?

folder = r"C:\Users\xx\Desktop\Python Final Project\Raw"

import os
import re
import shutil
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
    srcpath = os.path.join(root, filename)
    #split the filename so that we can rename accordingly below, filename_split[0] = filename, filename_split[1] = file ext
    filename_split = os.path.splitext(filename)
    name = filename_split[0]
    ext = filename_split[1]
    newfolder = ''
    destpath = os.path.join(newfolder, "ref" + re.sub(r'\d', '', filename_split[0]) + filename_split[1])
    #first step: remove AP files entirely from directory
    if filename.startswith("AP27"):
        os.remove(os.path.join(folder, filename))
    #the rest include a version number that must be routed to the correct year folder directory created above
    elif filename.__contains__("30") and filename.__contains__("Day"):
        newfolder = r"C:\Users\xx\Desktop\Python Final Project\Raw\2013"
        os.rename(os.path.join(root, filename),
                  os.path.join(newfolder, "ref" + re.sub(r'\d', '', filename_split[0]) + filename_split[1]))
        print(filename)
        day_name = re.split(r'[\s-]+', filename)
        print(day_name)
        first_name = day_name[0]
        last_name = day_name[1]
        os.rename(os.path.join(newfolder, filename),
                      os.path.join(newfolder, "ref" + first_name + '1' + last_name))    
  • 1
    Вы не ожидаете, что os.rename() переменную filename , правильно? Если да, это было бы проблемой.
  • 0
    нет, я не хочу изменять переменную имени файла.
Показать ещё 2 комментария
Теги:
python-os

1 ответ

1

Я решил это сам:

                os.rename(os.path.join(root, filename),
                      os.path.join(newfolder, "ref" + re.sub(r'\d{2}', '', name) + ext))

Добавление {2} заставил его искать 2 последовательных числа и оставило 1 в одиночку.

Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню