Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 28, 2019 14:11:10

Godseffiana
От: Россия
Зарегистрирован: 2019-11-28
Сообщения: 3
Репутация: +  0  -
Профиль   Адрес электронной почты  

Изменить имена файлов в папке с расширением .EXM

Здравствуйте! Задача отбросить лишние знаки в названиях файлов в определенной папке, то есть “*****нужная часть**********.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'

В программировании новичок, не судите строго.

Офлайн

#2 Ноя. 28, 2019 14:50:55

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Изменить имена файлов в папке с расширением .EXM

Godseffiana
os.rename(“\\*.EXM”,".EXM“)
os.rename так не работает, https://docs.python.org/3/library/os.html
в src и dst должны быть указаны конкретные имена файлов или папока, оно не понимает шаблонов или подставных символов.
Сначала тебе нужно найти просто все файлы с заданым расширением, а потом в цикле пройтись по каждому и переименовать.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Ноя. 28, 2019 16:26:45

lifemaker
Зарегистрирован: 2019-10-16
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Изменить имена файлов в папке с расширением .EXM

Если нужно выполнить конкретную задачу, то уже есть такие утилиты для массового переименования. Например в Total Commander вызывается по Ctrl+M

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

Офлайн

#4 Ноя. 28, 2019 16:33:06

Godseffiana
От: Россия
Зарегистрирован: 2019-11-28
Сообщения: 3
Репутация: +  0  -
Профиль   Адрес электронной почты  

Изменить имена файлов в папке с расширением .EXM

Проблема в том, что он не меняет имя даже одного файла.

 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)

Офлайн

#5 Ноя. 28, 2019 16:37:39

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Изменить имена файлов в папке с расширением .EXM

Вот эту строку я не понял, что она делает?

 file_exm 0



Офлайн

#6 Ноя. 28, 2019 16:45:21

lifemaker
Зарегистрирован: 2019-10-16
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Изменить имена файлов в папке с расширением .EXM

Godseffiana
“file_exm” “SCI__DACS__0222A001_2019-322T15-16-34__00001.EXM”
запятая

Так то интерпритатор ошибки должен бы писать в консоль…

Офлайн

#7 Ноя. 29, 2019 03:32:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Изменить имена файлов в папке с расширением .EXM

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'
>>>



Офлайн

#8 Ноя. 29, 2019 09:51:08

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Изменить имена файлов в папке с расширением .EXM

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version