python os.listdir () affiche les fichiers protégés

J’essaie donc de me faire un script Python qui parcourt le dossier de musique sélectionné et indique à l’utilisateur si un album spécifique n’a pas de couverture d’album. Il passe essentiellement par tous les fichiers et vérifie if file[-4:] in (".jpg",".bmp",".png") , si vrai, a trouvé un fichier image. Pour que ce soit clair, la structure de mes dossiers est la suivante:

  • Dossier de musique
    • Arctic Monkeys
      • Humbug (2009)
      • Suck it and see (2011)
    • Morphine
      • Cure For Pain (1993)

.. etc. Je teste le script pour trouver s’il y a une couverture manquante dans mon répertoire Arctic Monkeys, et mon script passe par le dossier “Humbug (2009)” et trouve AlbumArtSmall.jpg qui n’apparaît pas dans l’invite de commande alors j’ai essayé “Afficher les fichiers / dossiers cachés” et toujours rien. Cependant, les fichiers s’affichent une fois que je décoche la case “Masquer les fichiers protégés du système d’exploitation” , pour que cela soit un peu étrange.

Ma question est la suivante: comment demander à Python de sauter la recherche des fichiers cachés / protégés? J’ai vérifié comment ignorer les fichiers cachés en utilisant os.listdir ()? mais la solution que j’ai trouvée ne fonctionne que pour les fichiers commençant par “.”, et ce n’est pas ce dont j’ai besoin.

À votre santé!


Edit – voici le code:

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

Vous pouvez utiliser le module pywin32 et tester manuellement FILE_ATTRIBUTE_HIDDEN ou un nombre quelconque d’atsortingbuts

 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 

ainsi:

 import win32api, win32con #test for a certain type of atsortingbute atsortingbute = win32api.GetFileAtsortingbutes(filepath) #The file atsortingbutes 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 atsortingbute & (win32con.FILE_ATTRIBUTE_HIDDEN | win32con.FILE_ATTRIBUTE_SYSTEM): raise Exception("hidden file") #or whatever #or alter them win32api.SetFileAtsortingbutes(filepath, win32con.FILE_ATTRIBUTE_NORMAL) #or FILE_ATTRIBUTE_HIDDEN 

Après avoir modifié un fichier, jetez un coup d’œil dans le dossier, il ne sera plus caché.

J’ai trouvé cette information ici et ici: Vérification des atsortingbuts de fichier en python


Vous pouvez également essayer d’utiliser la fonction os.stat , dont les documents ici , puis utiliser le module stat pour mieux comprendre ce que vous regardez.

J’ai trouvé ces questions pertinentes. (python) signification de st_mode et Comment puis-je obtenir un masque d’autorisation de fichier?