Python 3.5: невозможно удалить не буквенно-цифровые символы из имени файла

я написал скрипт python, чтобы переименовать все файлы, присутствующие в папке, удалив все числа из имени файла, но это не работает. Примечание. Тот же код отлично работает для python2.7.

import os

def rename_files():
    #(1) get file names from a folder
    file_list = os.listdir(r"D:\prank")
    print(file_list)
    saved_path = os.getcwd()
    print("Current working Directory is " + saved_path)
    os.chdir(r"D:\prank")
    #(2) for each file ,rename filename
    for file_name in file_list:
        os.rename(file_name, file_name.translate(None,"0123456789"))
rename_files()

Может ли кто-нибудь сказать мне, как заставить его работать. Функция перевода не работает должным образом?


person user3932077    schedule 29.06.2016    source источник


Ответы (3)


Проблема в части os.rename() вашего кода.

os.rename() требует, чтобы вы указали полный путь к файлу/папке, на который вы хотите его изменить, в то время как вы указали только имя файла, а не полный путь.

Вы должны добавить полный путь к каталогу папок/файлов. поэтому это должно выглядеть так:

def rename_files():

# add the folder path

    folder_path = "D:\prank\\"
    file_list = os.listdir(r"D:\prank")
    print(file_list)
    saved_path = os.getcwd()
    print("Current working Directory is " + saved_path)
    os.chdir(r"D:\prank")

    # Concat the folder_path with file_name to create the full path.

    for file_name in file_list:
        full_path = folder_path + file_name
        print (full_path) # See the full path here.
        os.rename(full_path, full_path.translate(None, "0123456789"))
person N.P    schedule 29.06.2016

посмотрите документацию для os, вот что я нашел при переименовании:

os.rename(src, dst, *, src_dir_fd=Нет, dst_dir_fd=Нет)

Rename the file or directory src to dst. If dst is a directory, OSError will be raised. On Unix, if dst exists and is a file, it will be replaced silently if the user has permission. The operation may fail on some Unix flavors if src and dst are on different filesystems. If successful, the renaming will be an atomic operation (this is a POSIX requirement). On Windows, if dst already exists, OSError will be raised even if it is a file.

This function can support specifying src_dir_fd and/or dst_dir_fd to supply paths relative to directory descriptors.

If you want cross-platform overwriting of the destination, use replace().

New in version 3.3: The src_dir_fd and dst_dir_fd arguments.

вот ссылка на документацию, надеюсь поможет, спасибо

https://docs.python.org/3/library/os.html

person Cid-El    schedule 29.06.2016

Другие указали на другие проблемы с вашим кодом, но что касается использования перевода, в Python 3.x вам необходимо передать порядковые номера сопоставления словаря с новыми значениями (или None). Этот код будет работать:

import string
...
file_name.translate(dict(ord(c), None for c in string.digits))

но это кажется легче понять:

import re
...
re.sub(r'\d', '', file_name)
person user94559    schedule 14.07.2016