Python 通过目录循环在诱变剂中添加ID3标签

Python 通过目录循环在诱变剂中添加ID3标签,python,mutagen,Python,Mutagen,(就编码而言,我是一个绝对的初学者,这是我的第一个项目。) 我试图在Windows10上使用诱变剂来循环遍历一个目录,并为遇到的每个文件添加ID3标记跟踪号。不幸的是,诱变剂似乎很难识别这些文件。到目前为止,我的代码是这样的: import os import mutagen import mutagen.id3 from mutagen.id3 import ID3 from mutagen.mp3 import MP3 from mutagen.easyid3 import EasyID3

(就编码而言,我是一个绝对的初学者,这是我的第一个项目。)

我试图在Windows10上使用诱变剂来循环遍历一个目录,并为遇到的每个文件添加ID3标记跟踪号。不幸的是,诱变剂似乎很难识别这些文件。到目前为止,我的代码是这样的:

import os
import mutagen
import mutagen.id3
from mutagen.id3 import ID3
from mutagen.mp3 import MP3
from mutagen.easyid3 import EasyID3

files = os.listdir(r'C:\Users\Kurt\Music\Music\Brad Paisley\python test')
count = 0

for file in files:
    path = file
    try:
        tag = EasyID3(path)
    except:
        tag = mutagen.File(path, easy=True)
        tag.add_tags()
    tag['tracknumber'] = count + 1
    tag.save(v2_version=3)
    file.save()
    count = count + 1
这基本上是我在谷歌上搜索到的各种其他东西拼凑而成的,但当我运行它时,它给了我一个巨大的错误,我将在这里发布前几行:

Traceback (most recent call last):
  File "C:\Users\Kurt\AppData\Local\Programs\Python\Python36-32\lib\site-packages\mutagen\_util.py", line 235, in _openfile
    fileobj = open(filename, "rb+" if writable else "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'americansaturdaynight 01- American Saturday Night - Copy.mp3'

正如我所说的,我是一个绝对的初学者,所以我并不真正理解这其中的大部分含义,尽管这似乎意味着我选择的目录(或目录中的文件?)不存在,但事实上确实如此。有人能帮我解决这个问题吗?

您的问题在于路径-
os.listdir()
只列出文件/目录,而不列出它们的路径,因此,除非您碰巧从指定路径执行脚本,否则Python将无法找到该文件

您始终可以将主路径定义为:

source_dir = r"C:\Users\Kurt\Music\Music\Brad Paisley\python test"

for name in os.listdir(source_dir):  # iterate over all files/directories in source_dir
    if name[-4:].lower() != ".mp3":  # ignore non-mp3 files
        continue
    path = os.path.join(source_dir, name)  # build the whole file path
    # you can also check with os.path.isfile(path) to make sure it's a file you're processing
    # etc. (your mutagen update logic)

您可能还希望使用应用的扩展筛选器模式查找直接目录列表,这样您就不必自己手动检查。

非常感谢!
source\u dir
修复了它,尽管我在运行它之前还发现了另外两个错误:
'tracknumber'
需要是一个字符串,所以它是
str(count+1)
file.save()
部分没有定义,也没有必要,所以我删除了它。