Как удалить числа из строк в списке, используя один цикл for в python3?

#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] Такого файла или каталога нет