4

所以,我试图让自己成为一个 Python 脚本,它通过选定的音乐文件夹并告诉用户特定专辑是否没有专辑封面。它基本上遍历所有文件并检查if file[-4:] in (".jpg",".bmp",".png"),如果为真,它找到了一个图片文件。为了清楚起见,我的文件夹结构是:

  • 音乐文件夹
    • 北极猴子
      • 骗子 (2009)
      • 吸一口,看看(2011)
    • 吗啡
      • 治愈疼痛 (1993)

.. 等等。我正在测试脚本以查找我的北极猴子目录中是否缺少封面,并且我的脚本通过“Humbug (2009)”文件夹并找到不在命令提示符中显示的AlbumArtSmall.jpg所以我尝试了“显示隐藏的文件/文件夹”仍然没有。但是,一旦我取消选中“隐藏受保护的操作系统文件”,文件就会显示出来,所以这有点奇怪。

我的问题是 -我如何告诉 Python 跳过搜索隐藏/受保护的文件? 我查看了如何使用 os.listdir() 忽略隐藏文件?但我在那里找到的解决方案仅适用于以“。”开头的文件,这不是我需要的。

干杯!


编辑 - 这是代码:

import os

def findCover(path, band, album):
    print os.path.join(path, band, album)
    coverFound = False

    for mFile in os.listdir(os.path.join(path, band, album)):
        if mFile[-4:] in (".jpg",".bmp",".png"):
            print "Cover file found - %s." % mFile
            coverFound = True
            return coverFound

musicFolder = "E:\Music"   #for example
noCovers = []

for band in os.listdir(musicFolder):    #iterate over bands inside the music folder
    if band[0:] == "Arctic Monkeys":    #only Arctic Monkeys
        print band
        bandFolder = os.path.join(musicFolder, band)
        for album in os.listdir(bandFolder):
            if os.path.isdir(os.path.join(bandFolder,album)):
                if findCover(musicFolder, band, album): #if cover found
                    pass                                #do nothing
                else:
                    print "Cover not found"
                    noCovers.append(band+" - "+album)   #append to list
            else:                       #if bandFolder is not actually a folder
                pass
        print ""
4

1 回答 1

1

您可以与pywin32模块一起使用,并手动测试FILE_ATTRIBUTE_HIDDEN任何数量的属性

FILE_ATTRIBUTE_ARCHIVE              = 32
FILE_ATTRIBUTE_ATOMIC_WRITE         = 512
FILE_ATTRIBUTE_COMPRESSED           = 2048
FILE_ATTRIBUTE_DEVICE               = 64
FILE_ATTRIBUTE_DIRECTORY            = 16
FILE_ATTRIBUTE_ENCRYPTED            = 16384
FILE_ATTRIBUTE_HIDDEN               = 2
FILE_ATTRIBUTE_NORMAL               = 128
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  = 8192
FILE_ATTRIBUTE_OFFLINE              = 4096
FILE_ATTRIBUTE_READONLY             = 1
FILE_ATTRIBUTE_REPARSE_POINT        = 1024
FILE_ATTRIBUTE_SPARSE_FILE          = 512
FILE_ATTRIBUTE_SYSTEM               = 4
FILE_ATTRIBUTE_TEMPORARY            = 256
FILE_ATTRIBUTE_VIRTUAL              = 65536
FILE_ATTRIBUTE_XACTION_WRITE        = 1024

像这样:

import win32api, win32con

#test for a certain type of attribute
attribute = win32api.GetFileAttributes(filepath)
#The file attributes are bitflags, so you want to see if a given flag is 1.
# (AKA if it can fit inside the binary number or not) 
# 38 in binary is  100110 which means that 2, 4 and 32 are 'enabled', so we're checking for that
## Thanks to Nneoneo
if attribute & (win32con.FILE_ATTRIBUTE_HIDDEN | win32con.FILE_ATTRIBUTE_SYSTEM):
  raise Exception("hidden file") #or whatever

#or alter them
win32api.SetFileAttributes(filepath, win32con.FILE_ATTRIBUTE_NORMAL) #or FILE_ATTRIBUTE_HIDDEN

更改文件后,查看文件夹,它将不再隐藏。

在此处和此处找到此信息: Checking file attributes in python


或者,您可以尝试使用该os.stat功能,其文档在此处,然后使用该stat模块进一步了解您正在查看的内容。

找到了这些相关的问题。(python) st_mode 的含义以及如何获取文件的权限掩码?

于 2012-08-26T16:00:26.657 回答