python os.listdir()显示受保护的文件

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

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

.. 等等。 我正在testing脚本以查找Arctic Monkeys目录中是否缺less封面,我的脚本通过“Humbug(2009)”文件夹,发现没有显示在命令提示符中的 AlbumArtSmall.jpg ,所以我尝试了“显示隐藏的文件/文件夹”仍然没有。 但是, 一旦我取消选中“隐藏受保护的操作系统文件” , 这些文件就显示出来了 ,这有点奇怪。

我的问题是 – 我如何告诉Python跳过search隐藏/保护的文件? 我检查了如何使用os.listdir()忽略隐藏的文件? 但我在那里find的解决scheme只适用于以“。”开头的文件,这不是我所需要的。

干杯!


编辑 – 所以这是代码:

 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 "" 

您可以使用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 

在修改文件后,查看该文件夹,不会再隐藏文件。

在这里和这里找到这个信息: 在Python中检查文件属性


或者,您可以尝试使用os.stat函数,其中的文档在此处 ,然后使用stat模块来进一步理解您正在查看的内容。

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