2009-03-18 3 views
2

파이썬을 사용하여 디렉토리의 각 파일에 대한 아카이브 비트를 확인하고 싶습니다. 지금까지 다음과 같은있어하지만 제대로 작동하도록 얻을 수 없습니다. 스크립트의 아이디어는 아카이브 비트가있는 모든 파일을 볼 수있게하는 것입니다.파이썬에서 파일 속성 검사하기

감사

# -*- 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 ('####') 

편집 : 모든 파일은 모든 파일이 더 속성에 비트하지 않았는지 보여줍니다 'ATTRIB'을하고,에 아카이브 비트를 가지고있는 것 같습니다.

+0

"제대로 작동하지 않는다"고 말하면 어떻게됩니까? – zdan

+0

-1 : 추적 또는 오류 메시지가 없습니다. –

답변

6

파일 목록이 완전히 규정되지 않은 경로가 있습니다, 그래서 당신은

win32file.GetFileAttributes(i) 

를 호출 할 때이 파일을 찾을 수 및 오류 코드를 반환 할 수 os.walk에서 반환; 그것은 -1이됩니다. 따라서 작업은

fattrs & win32con.FILE_ATTRIBUTE_ARCHIVE 

항상 true입니다. 확장자를 확인하는 경우

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

는,에 의존보다는 확장을 검색 할 os.path.splitext(path)를 사용하는 것이 아마도 더 : GetFileAttributes와 성공 있도록

당신은 파일 이름에 루트에 가입해야 너는 그걸로 3 자 길이 될거야.

+0

정말 고마워요. 정말 도움이됩니다. –