Ошибка при переименовании файлов с помощью os.rename () в Python - PullRequest
2 голосов
/ 26 апреля 2020
import os

for filename in os.listdir("C:/Users/Awesome/Music"):
    if filename.endswith("lyrics.mp3"):
        os.rename(filename,filename[0 : len(filename)-11]+".mp3")

Приведенный выше код возвращает ошибку

File "c:/python/lyrics-pop.py", line 6, in <module>
    os.rename(filename,filename[0 : len(filename)-11]+".mp3")
FileNotFoundError: [WinError 2] The system cannot find the file specified: '2 Chainz - Bigger Than You (feat Drake  Quavo) lyrics.mp3' -> '2 Chainz - Bigger Than You (feat Drake  Quavo).mp3'

"" "

Я убедился, что никакая другая программа не обращается к файлам .mp3, и удалил атрибут readonly. Что может быть причиной этого?

Ответы [ 3 ]

0 голосов
/ 26 апреля 2020

Это связано с тем, что python не может найти файл, из которого запущена эта программа, поскольку полный путь не указан.

Вы можете сделать это следующим образом:

import os
filedir = "C:/Users/Awesome/Music"
for filename in os.listdir(filedir):
    if filename.endswith("lyrics.mp3"):
        filepath = os.path.join(filedir, filename)
        new_file = os.path.join(filedir, filename[0 : len(filename)-11]+".mp3")
        os.rename(filepath, new_file)
0 голосов
/ 26 апреля 2020

Как указано в комментариях, проблема заключается в относительном пути файлов.
Вы можете использовать glob, который даст вам полный путь, то есть:

from glob import glob
from os import rename

for f in glob("C:/Users/Awesome/Music/*lyrics.mp3"):
    rename(f, f[0 : len(f)-11]+".mp3")
0 голосов
/ 26 апреля 2020

Вероятно, проблема в том, что вы передаете относительный путь к os.rename, добавляете dir к пути к файлу, например:

import os
dir = "C:/Users/Awesome/Music"
for filename in os.listdir(dir):
    if filename.endswith("lyrics.mp3"):
        os.rename(os.path.join(dir,filename),os.path.join(dir,filename[0 : len(filename)-11])+".mp3")
...