ValueError:重命名:在dst中嵌入空字符

时间:2019-04-13 23:14:11

标签: python null-character

我正在尝试根据元数据重命名媒体文件名。

文件名格式为song name - artist name

import os
from tinytag import TinyTag
import re

for root, dirs, files in os.walk("C:/Users/username/Desktop/Music/"):
    for name in files:
        tag = TinyTag.get(root + "\\" + name)
        if tag.artist != "":
            if name.endswith((".mp3",".m4a")):
                # try:
                file_ext = os.path.splitext(name)[-1]
                old_name = os.path.join(root, name)
                new_name = re.sub(' +', ' ', os.path.join(root, tag.title + " - " + tag.artist + file_ext))
                print(new_name)
                os.rename(old_name, new_name)
                # except:
                    # pass

除Prince的Little Red Corvette以外,所有文件均可用:

C:/Users/username/Desktop/Music/1973 - James Blunt.mp3
C:/Users/username/Desktop/Music/Little Red Corvette  - Prince .mp3
Traceback (most recent call last):
  File "C:/Users/username/PycharmProjects/Practice/editAudioFileNames.py", line 15, in <module>
    os.rename(old_name, new_name)
ValueError: rename: embedded null character in dst

ValueError是什么意思?我注意到克尔维特之后还有多余的空间。我确实在代码中使用了re.sub来修剪文件名。

暂时忽略try, except,因为代码可以使用它。我可以手动更改文件名,因为这是850首歌曲中的唯一一首,但我想知道以供将来参考。

请注意,这是我有史以来第一个有用的代码!最欢迎对优化提出批评。

1 个答案:

答案 0 :(得分:0)

请您尝试替换这些行

old_name = os.path.join(root, name)
new_name = re.sub(' +', ' ', os.path.join(root, tag.title + " - " + tag.artist + file_ext))

带有这些行

old_name = os.path.join(root, name.strip())
new_name = re.sub(' +', ' ', os.path.join(root, tag.title.strip() + " - " + tag.artist.strip() + file_ext.strip()))

谢谢