Найти - Пользователи
Полная версия: Изменить имена файлов в папке с расширением .EXM
Начало » Python для новичков » Изменить имена файлов в папке с расширением .EXM
1
Godseffiana
Здравствуйте! Задача отбросить лишние знаки в названиях файлов в определенной папке, то есть “*****нужная часть**********.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'

В программировании новичок, не судите строго.
PEHDOM
Godseffiana
os.rename(“\\*.EXM”,".EXM“)
os.rename так не работает, https://docs.python.org/3/library/os.html
в src и dst должны быть указаны конкретные имена файлов или папока, оно не понимает шаблонов или подставных символов.
Сначала тебе нужно найти просто все файлы с заданым расширением, а потом в цикле пройтись по каждому и переименовать.
lifemaker
Если нужно выполнить конкретную задачу, то уже есть такие утилиты для массового переименования. Например в Total Commander вызывается по Ctrl+M

Если же хотите попрактиковаться, то, как верно заметил PEHDOM, нужно переименовывать по одному файлу. Для этого нужно организовать цикл по списку.
Godseffiana
Проблема в том, что он не меняет имя даже одного файла.

 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
Вот эту строку я не понял, что она делает?
 file_exm 0
lifemaker
Godseffiana
“file_exm” “SCI__DACS__0222A001_2019-322T15-16-34__00001.EXM”
запятая

Так то интерпритатор ошибки должен бы писать в консоль…
py.user.next
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'
>>>
PEHDOM
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))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB