Python操作前检测文件类型

2024-09-26 22:54:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理this段代码,代码末尾的Try命令上出现了一个奇怪的bug。整个脚本的目标是.flac文件,有时它会读取文件夹中的.jpg文件并放大。简单地说,我继续在Try之前添加了if (".flac" or ".FLAC" in Song):,这样一来,它只会处理正确的文件类型。然而,这完全没有什么不同,我继续得到以下错误

Traceback (most recent call last):
  File ".\musync.py", line 190, in <module>
    match_metadata(CurrentAlbum + Song, CoAlbum + Song)
  File ".\musync.py", line 152, in match_metadata
    TagSource = FLAC(SrcFile)
  File "C:\Python34\lib\site-packages\mutagen\_file.py", line 41, in __init__
    self.load(filename, *args, **kwargs)
  File "C:\Python34\lib\site-packages\mutagen\flac.py", line 721, in load
    self.__check_header(fileobj)
  File "C:\Python34\lib\site-packages\mutagen\flac.py", line 844, in __check_header
    "%r is not a valid FLAC file" % fileobj.name)
mutagen.flac.FLACNoHeaderError: 'C:/Users/berna/Desktop/Lib/Andrew Bird/Armchair Apocrypha/cover.jpg' is not a valid FLAC file

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ".\musync.py", line 194, in <module>
    check_song(CurrentAlbum + Song, CoAlbum)
  File ".\musync.py", line 83, in check_song
    TagSource = FLAC(SrcFile)
  File "C:\Python34\lib\site-packages\mutagen\_file.py", line 41, in __init__
    self.load(filename, *args, **kwargs)
  File "C:\Python34\lib\site-packages\mutagen\flac.py", line 721, in load
    self.__check_header(fileobj)
  File "C:\Python34\lib\site-packages\mutagen\flac.py", line 844, in __check_header
    "%r is not a valid FLAC file" % fileobj.name)
mutagen.flac.FLACNoHeaderError: 'C:/Users/berna/Desktop/Lib/Andrew Bird/Armchair Apocrypha/cover.jpg' is not a valid FLAC file

为什么if情况没有起到作用,我该如何修复它?目前代码如下: 在

^{pr2}$

Tags: inpysonglibpackageschecklinesite
2条回答

试试看:

Songs = ["a.flac", "a.mp3", "b.FLAC"]
flac_files = [s for s in Songs if s.lower().endswith('.flac')]

正如@EliKorvigo指出的,该错误是由if条件中的一个简单的错误书写引起的,fix如下所示:

for Song in listdir(CurrentAlbum):
    if (".flac" in Song or ".FLAC" in Song):
        try:
            # Tries to match lib and dev song's metadata.
            match_metadata(CurrentAlbum + Song, CoAlbum + Song)
        except:
            # If that fails will try to fix both Filename and Tag
            # fields.
            check_song(CurrentAlbum + Song, CoAlbum)
            fix_metadata(CurrentAlbum + Song, CoAlbum + Song)
            try:
                # Try again after fix.
                match_metadata(CurrentAlbum + Song, CoAlbum + Song)
            except Exception as e:
                # If it still doesn't work there's black magic in place
                # go sleep, drink a beer and try again later.
                print("""Ehm, something happened and your sync failed.\n
                      Error:{}""".format(e))
                raise SystemExit(0)

相关问题 更多 >

    热门问题