В настоящее время я работаю над сценарием, чтобы использовать сырые текстовые файлы, размещать их в правильных папках года на основе системы номеров версий и переименовывать их так, чтобы наши разработчики могли легко интегрировать их в наш продукт.
Этот файл называется 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))
Я решил это сам:
os.rename(os.path.join(root, filename),
os.path.join(newfolder, "ref" + re.sub(r'\d{2}', '', name) + ext))
Добавление {2} заставил его искать 2 последовательных числа и оставило 1 в одиночку.
Спасибо!
os.rename()
переменнуюfilename
, правильно? Если да, это было бы проблемой.