2017-09-07 16 views
3

stat.pyos.stat으로보고 된 st_mode (정수)에서 익숙한 "문자열"형식 (이 표현에 적절한 이름이 있는지 여부는 알 수 없음)으로 이동하는 a helper function을가집니다.'-rw-r - r--'에서 33188로 어떻게 돌아갈 수 있습니까?

>>> stat.filemode(0o100644) 
'-rw-r--r--' 

다른 방법으로 도우미 기능이 있습니까?

>>> filemode_inv('-rw-r--r--') 
33188 

이것은 내가 시도했지만 잘못된 결과를 생성합니다. 즉 등 끈적 끈적한 비트를 처리 제대로 파일 유형을 나타내는 첫 번째 문자를 치료, 그리고 아니에요

table = {ord('r'): '1', ord('w'): '1', ord('-'): '0'} 

def filemode_inv(s): 
    return int(s.translate(table), 2) 
+0

문자열을 가져 오는 이유는 무엇입니까? 그 대신 대체 형식을 제공 할 수 있습니까? – chepner

답변

2

파이썬은 오픈 소스이며, 당신은 단지 stat 모듈에 대한 소스 코드를 읽고 역 기능을 쓸 수 있습니다.

참조 : 나는 "장난 꾸러기"인과 stat 모듈의 private 멤버에 접근하고있어 https://github.com/python/cpython/blob/master/Lib/stat.py#L112

import stat 

def un_filemode(mode_str): 
    mode = 0 
    for char, table in zip(mode_str, stat._filemode_table): 
     for bit, bitchar in table: 
      if char == bitchar: 
       mode |= bit 
       break 
    return mode 

참고. 일반적인주의 사항이 적용됩니다.

또한 0o100000은 기술적으로 파일 모드의 일부가 아니기 때문에 에 대한 설명서가 올바르지 않습니다. 파일 형식은 S_IFREG입니다. inode(7) 가입일 :

POSIX 마스크 S_IFMT에 대응 stat.st_mode 비트를 파일 형식으로 (아래 참조)를 참조하는 파일 모드 비트와 같은 마스크 07,777에 상응하는 12 비트 및 최하위 9 비트 (0777) 파일 권한 비트로.

+0

제 플랫폼에서 Python 구현의 filemode는 C 구현의 해당 [import] (https://github.com/python/cpython/blob/1f06a680de465be0c24a78ea3b610053955daa99/Lib/stat.py#L176)로 날아갑니다. 각 구현의 동작은 다소 다릅니다. Go figure ... – wim

+0

@wim : 파이썬 코드가 제대로 작동하지 않는 이유가 그 때문입니다. –