首页 > 解决方案 > os.rename 说无法访问该文件,因为它正在被另一个进程使用

问题描述

我正在研究一个有用的脚本,用于根据使用audio_metadata库的歌曲标签重命名 mp3 文件。

我已经尝试过os.rename使用os.system('ren "FILENAME" "NEWNAME"').

我的代码:

import os
import audio_metadata

for x in range(len(songs)):
    song = songs[x]
    metadata = audio_metadata.load('%s' % song)
    titlel = metadata['tags'].title
    artistl = metadata['tags'].artist
    title = titlel[0].strip()
    artist = artistl[0].strip()
    newname = '%s - %s.mp3' % (title, artist)
    print("[*] %s => %s" % (song, newname))
    os.rename(song, newname)

我预计:

your love.mp3 => Your Love-The Outfield.mp3

但我明白了:

PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 
  'your love.mp3' -> "Your Love-The Outfield.mp3"

标签: pythonpython-3.x

解决方案


调用时读取后是否有可能audio_metadata未正确关闭文件对象metadata = audio_metadata.load('%s' % song)?我快速浏览了一下 audio_metadata 源,看起来您可以传递文件对象而不是文件路径字符串。

尝试以这种方式获取元数据:

with open('%s' % song, 'rb') as f:
    metadata = audio_metadata.load(f)

推荐阅读