#python-3.x
#python-3.x
Вопрос:
Есть этот код, в котором я пытаюсь удалить все числовые символы из строк в именах файлов. Кажется, все идет нормально, но имена файлов не меняются.
import os
files_list = os.listdir('/mnt/c/Users/maverick/Desktop/prank/prank')
for file_name in files_list:
count = 0
l = []
for char in file_name:
if not char.isdigit():
l.append(char)
new_string = ''.join(l)
print('New string: ' new_string)
print('Old file name: ' file_name)
file_name = new_string
print('New file name: ' file_name)
count = count 1
print(files_list)
Ответ №1:
Если вы хотите, rename
вы можете использовать os.rename()
. Кроме того, чтобы удалить все числа из имен файлов, вы можете использовать maketrans
для цифр из string
вот так.
import os
from string import digits
path = '/mnt/c/Users/maverick/Desktop/prank/prank'
files_list = os.listdir(path)
new_files_list = []
remove_digits = str.maketrans('', '', digits)
for file_name in files_list:
count = 0
new_string = file_name.translate(remove_digits)
new_files_list.append(new_string)
print('New string: ' new_string)
os.rename(os.path.join(path, file_name), os.path.join(path, new_string))
print('Old file name: ' file_name)
file_name = new_string
print('New file name: ' file_name)
count = count 1
print('Old Filenames :', files_list)
print('New Filenames :', new_files_list)
Комментарии:
1. Это работает, спасибо. Но я не совсем понимаю, как работает метод maketrans(). В официальной документации python есть очень краткое объяснение, где его синтаксис описывается как str.maketrans(x[, y[, z]]). Что это за запятые после квадратных скобок? Как новичок может понять что-то из этого? docs.python.org/3/library /…
Ответ №2:
Вы могли бы достичь этого, используя понимание списка:
files_list = os.listdir('/mnt/c/Users/maverick/Desktop/prank/prank')
processed = [''.join([c for c in name if not c.isdigit()]) for name in files_list]
Пример:
files_list = ["abc", "abc1", "a2b3c4"]
processed = [''.join([c for c in name if not c.isdigit()]) for name in files_list]
print(processed) # >> ['abc', 'abc', 'abc']
Обновить
Если ваша реальная цель — переименовать ваши файлы, вам нужен метод os.rename().
Ответ №3:
Вам нужно переименовать сам файл, а не просто записать новую строку в старое имя файла внутри вашего скрипта. Вы могли бы использовать os.rename
:
import os
path = '/mnt/c/Users/maverick/Desktop/prank/prank'
files_list = os.listdir(path)
for file_name in files_list:
count = 0
l = []
for char in file_name:
if not char.isdigit():
l.append(char)
new_string = ''.join(l)
print('New string: ' new_string)
print('Old file name: ' file_name)
os.rename(os.path.join(path, file_name), os.path.join(path, new_string))
print('New file name: ' file_name)
count = count 1
print(files_list)
Комментарии:
1. Этот код выдает ошибку — FileNotFoundError: [Ошибка 2] Такого файла или каталога нет