2009-03-18 1 views
2

pythonを使ってディレクトリ内の各ファイルのアーカイブビットをチェックしたいと思います。これまでのところ私は次のことがありますが、私はそれが正しく動作するようにすることはできません。スクリプトのアイデアは、アーカイブビットを持つすべてのファイルを見ることができるようにすることです。Pythonのファイル属性をチェックする

おかげ

# -*- coding: latin-1 -*- 
import os , win32file, win32con 
from time import * 
start = clock() 

ext = [ '.txt' , '.doc' ] 

def fileattributeisset(filename, fileattr): 
    return bool(win32file.GetFileAttributes(filename) & fileattr) 

for root, dirs, files in os.walk('d:\\Pruebas'): 
    print ("root", root)  
    print ("dirs", dirs) 
    print ("files", files) 
    for i in files: 
     if i[ - 4:] in ext: 
      print('...', root, '\\', i, end=' ') 
      fattrs = win32file.GetFileAttributes(i) 
      if fattrs & win32con.FILE_ATTRIBUTE_ARCHIVE: 
       print('A isSet',fattrs) 
     #print(fileattributeisset(i, win32con.FILE_ATTRIBUTE_ARCHIVE)) 
    print ('####') 

EDIT:すべてのファイルはすべてのファイルが何の属性は上のビットなかっ有していることを示している「ATTRIB」をやって、上のアーカイブビットを持っているように見えます。

+0

「正常に動作しない」と言うと、どうなりますか? – zdan

+0

-1:トレースバックまたはエラーメッセージはありません。 –

答えて

6

ファイルリストがos.walkから返される完全修飾パスではありませんので、あなたは

win32file.GetFileAttributes(i) 

を呼び出すときには、ファイルを検索し、エラーコードを返すことができません。これは-1になります。だから操作

fattrs & win32con.FILE_ATTRIBUTE_ARCHIVE 

は常にtrueです。

あなたはGetFileAttributesが成功するように、ファイル名にルートに参加する必要があります:あなたは拡張子をチェックしているとき

fattrs = win32file.GetFileAttributes(os.path.join(root, i)) 

はまた、拡張子ではなく頼っを取得するためにos.path.splitext(path)を使用する方が良いでしょうそれらは3文字の長さでなければなりません。

+0

本当に助けてくれてありがとう。 –