4

そこで、選択したMusicフォルダーを調べて、特定のアルバムにアルバムカバーがないかどうかをユーザーに通知するPythonスクリプトを作成しようとしています。基本的にすべてのファイルを調べてチェックif file[-4:] in (".jpg",".bmp",".png")し、trueの場合は画像ファイルを見つけました。明確にするために、私のフォルダの構造は次のとおりです。

  • 音楽フォルダ
    • アークティック・モンキーズ
      • ハンバグ(2009)
      • 吸って見て(2011)
    • モルヒネ
      • 痛みの治療(1993)

.. 等々。スクリプトをテストして、Arctic Monkeysディレクトリにカバーがないかどうかを確認しています。スクリプトは、「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

ファイルを変更した後、フォルダを確認してください。ファイルはもう非表示になりません。

こことここでこの情報を見つけました:Pythonでファイル属性をチェックしています


または、os.stat関数のドキュメントをここで使用してから、statモジュールを使用して、何を見ているのかをさらに理解することもできます。

これらの関連する質問を見つけました。(python)st_modeの意味とファイルのパーミッションマスクを取得するにはどうすればよいですか?

于 2012-08-26T16:00:26.657 に答える