Python - удаление последних нескольких символов определенных файлов в каталоге

Я пытаюсь удалить последние несколько символов из нескольких файлов в определенном каталоге, используя rename функция. Код, который я написал, используя предложения на этом сайте, выглядит так, как будто он должен работать, но возвращает сообщение об ошибке:

FileNotFoundError: [WinError 2] Системе не удается найти указанный файл: 'test1.txt' -> 'test'

И вот мой код:

import os

list = os.listdir("C:\\Users\\Jonathan\\Desktop")

for file in list:
    if file.startswith("test"):
        os.rename(file, file[0:4])

Мой код показывает, что для всех файлов, начинающихся со слова "тест", удалите все символы после него. Как я уже сказал, для меня это выглядит так, как будто это должно работать, но я новичок в Python, и я даже не понимаю, что означает сообщение об ошибке.

4 ответа

Поскольку вы не указали полный путь к вашему файлу, вероятно, ваша программа сохраняла его в корневом каталоге. Кроме того, вы не должны использовать list или же file как имена переменных, поскольку они скрывают два типа Python.

import os

files_path = "C:\\Users\\Jonathan\\Desktop\\"

lst = os.listdir(files_path)

for file_name in lst:
    if file_name.startswith("test"):
        os.rename(files_path + file_name, files_path + file_name[:-4])

Вы на самом деле в папке, где вы переименовываете? Если нет, проблема, вероятно, в том, что вы ищете в локальной папке (где вы запустили программу). Добавьте этот путь к каждому имени файла:

import os

cwd = "C:\\Users\\Jonathan\\Desktop"
list = os.listdir(cwd)

for file in list:
    if file.startswith("test"):
        os.rename(cwd+file, cwd+"test")

Вам нужно использовать os.rename() с существующими путями. если ваш рабочий каталог не является каталогом, содержащим файл, ваш скрипт завершится ошибкой. это должно работать независимо от вашего рабочего каталога:

files_path = "C:\\Users\\Jonathan\\Desktop\\"
lst = os.listdir(files_path)

for fle in lst:
    if fle.startswith("test"):
        os.rename(os.path.join(files_path, fle), 
                  os.path.join(files_path, fle[:4]) )

и избегать использования list как реальное имя.

Попробуй это:

import os

list = os.listdir("C:\\Users\\Jonathan\\Desktop\\")

for file in list:
    if file[:4] == "test":
        os.renames(list+file, list+file[:4])

И, кстати, если вам нужно найти файлы и переименовать их рекурсивно (это означает, что вы найдете все каталоги в этом каталоге). Ты можешь использовать os.walk() как это:

for root, dirs, files in os.walk("C:\\Users\\Jonathan\\Desktop\\"):                                
    for name in files:
        if name[:4] == "test":
            os.renames(os.path.join(root, name), os.path.join(root, name)[:4])
Другие вопросы по тегам