Форум сайта python.su
0
Здравствуйте! Задача отбросить лишние знаки в названиях файлов в определенной папке, то есть “*****нужная часть**********.EXM”. Сделала вот так, но не получилось
import os # для работы с файлами
from glob import glob
file_exm=glob(os.getcwd()+“\\*.EXM”) # ищем все файлы с расширением *.EXM
os.rename(“\\*.EXM”,".EXM“) # меняем имена файлов
Выдало такую ошибку:
OSError Traceback (most recent call last)
<ipython-input-8-ca11b361b808> in <module>
—-> 1 os.rename(”\\*.EXM“,”.EXM")
OSError: Синтаксическая ошибка в имени файла, имени папки или метке тома: ‘\\*.EXM’ -> '.EXM'
В программировании новичок, не судите строго. 
Офлайн
294
Godseffianaos.rename так не работает, https://docs.python.org/3/library/os.html
os.rename(“\\*.EXM”,".EXM“)
[code python][/code]
Офлайн
1
Если нужно выполнить конкретную задачу, то уже есть такие утилиты для массового переименования. Например в Total Commander вызывается по Ctrl+M
Если же хотите попрактиковаться, то, как верно заметил PEHDOM, нужно переименовывать по одному файлу. Для этого нужно организовать цикл по списку.
Офлайн
0
Проблема в том, что он не меняет имя даже одного файла.
import subprocess # subprocess дает разработчику возможность запускать процессы программ из Python import os # для работы с файлами import ftplib # для работы с ftp сервером import time from glob import glob file_exm=glob(os.getcwd()+"\\*.EXM") # ищем все файлы с расширением *.EXM file_exm 0 old_file = os.path.join("file_exm" "SCI__DACS__0222A001_2019-322T15-16-34__00001.EXM") new_file = os.path.join("file_exm", "11:-6.EXM") os.rename(old_file, new_file)
Отредактировано FishHook (Ноя. 28, 2019 16:37:11)
Офлайн
568
Вот эту строку я не понял, что она делает?
file_exm 0
Офлайн
1
Godseffianaзапятая
“file_exm” “SCI__DACS__0222A001_2019-322T15-16-34__00001.EXM”
Офлайн
857
GodseffianaЭто нужно написать функцию изменения имени для одного файла. И потом в цикле по всем файлам применить переименование каждого файла с использованием этой функции получения нового имени файла.
Задача отбросить лишние знаки в названиях файлов в определенной папке, то есть “*****нужная часть**********.EXM”.
>>> def get_new_name(filename): ... rep0 = filename ... rep1 = rep0.replace('*', '') ... rep2 = rep1.replace(' ', '_') ... rep3 = rep2.lower() ... rep4 = rep3.capitalize() ... out = rep4 ... return out ... >>> get_new_name('*****нужная часть**********.EXM') 'Нужная_часть.exm' >>>
Офлайн
294
Godseffianaвы походу не понимаете что делает каждая команда в вашем скрипте от слова совсем.
Godseffiana
file_exm=glob(os.getcwd()+"\\*.EXM") # ищем все файлы с расширением *.EXM , на выходе получаем # список строк вида ['C:\\blah-blah-blah\\file1.exm',..... 'C:\\blah-blah-blah\\fileN.exm'] file_exm 0 # что это? тут должно вообще invalid syntax выдать, по идее вы хотели взять первый элемент # списка тогда old_file=file_exm[0] old_file = os.path.join("file_exm" "SCI__DACS__0222A001_2019-322T15-16-34__00001.EXM") # это вообще # не имеет смысла, нет запятой между строками, "file_exm" строка, хотя по идее должна быть # переменной, но и в этом случае непонятно что вы хотите получить? у вас и так в списке уже имена # файлов с полными путями. new_file = os.path.join("file_exm", "11:-6.EXM") # это тоже работать не может в принципе, "file_exm" это строка, # "11:-6.EXM" , двроеточие не может быть в названии файла, по крайней мере на NTFS , что с чем вы хотите обьединить? #Или вы хотели взять срез с названия файла?
import os wd = r'c:\Temp' ext = '.exm' for file_n in os.listdir(wd): if os.path.splitext(file_n)[1].lower() == ext: old_file = file_n new_file = '{}.EXM'.format(file_n[11:-6]) os.rename(os.path.join(wd, old_file), os.path.join(wd, new_file))
[code python][/code]
Отредактировано PEHDOM (Ноя. 29, 2019 09:55:50)
Офлайн