os.rename说无法访问该文件,因为该文件正在被另一个进程使用

时间:2019-03-29 00:29:22

标签: python python-3.x

我正在研究一个有用的脚本,该脚本使用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"

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

如果您正在通过VS调试器运行,那么我也遇到了类似的问题,我的解决方案是确保没有其他exe实例在后台进程中秘密运行(如任务管理器所示)。使用FMOD时遇到该问题,不确定是否有帮助?