Возможный дубликат:
Переименовать файлы на Python
Привет всем, я создаю script в Python, чтобы обернуть несколько OS-команд, связанных с редактированием объемного изображения, и большая часть задач завершена, однако я поставлен в тупик по одной задаче (казалось бы, простой в этом).
Когда я сканирую изображения на своем сканере, я получаю имя файла, похожее на это:
201105151110_0001A.jpg
где первая часть - это некоторая временная метка (которую я хочу заменить), однако я хотел сделать эту переменную ввода (где я или другие пользователи могли просто вставить это в командную строку, если я используя другой сканер, где структура имени файла может отличаться. 0001A означает переднюю часть первой фотографии/документа, и я хотел бы сохранить эту часть имени файла.
У меня есть три переменные:
old_prefix = input(bcolors.PROMPT + "Enter the prefix to replace: " + bcolors.ENDC)
new_prefix = input(bcolors.PROMPT + "Enter the new prefix: " + bcolors.ENDC)
working_directory
work_directory - это переменная из другой части кода, в которой будут расположены изображения. Цветовая часть только для того, чтобы я мог раскрасить результат и упростить его чтение. Когда я буду работать над ним, в каталоге будет от 1 до 1000 файлов.
Этот script будет запущен в Linux.
Спасибо!
--- EDIT ---
Извините за то, что потерял время, ребята, кажется, я упустил некоторую информацию в вопросе, связанном здесь Кириллом Кировым, кодом, который я придумал, который работает:
elif retouch_option == "06":
print(" ")
old_prefix = input(bcolors.PROMPT + "Enter the prefix to replace: " + bcolors.ENDC)
new_prefix = input(bcolors.PROMPT + "Enter the new prefix.......: " + bcolors.ENDC)
print(bcolors.OUTPUT + " ")
for fname in glob(working_directory + "*.jpg"):
keeper = fname[-9:]
print("Renaming image", keeper)
os.rename(fname, fname.replace(old_prefix, new_prefix))
Я думаю, что это должно быть безопасно, поскольку оно просто заменяет переменную old_prefix переменной new_prefix. Это правда? Если бы не я, я определенно оценил бы обратную связь, хотя пока это работает нормально.
что-то вроде:
sep = '_'
try:
prefix,keeper = filename.split(sep)
except: # filename does not match desired structure
print "not processed: no '" + sep + "' in '"+ filename + "'"
else: # split succeeded:
if prefix == old_prefix:
filename = new_prefix + sep + keeper
# more processing...
else:
print "prefix doesn't match in '" + filename + "'"
prefix, sep, rest = filename.partition('_')
тогда, if prefix == old_prefix: filename = new_prefix + sep + rest
будет работать, даже если filename
не содержит '_'
.
for fn in *.jpg ; do mv -n $fn $(echo $fn | sed 's/.*_//') ; done