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])