Как работает модуль статистики Python? - PullRequest
0 голосов
/ 12 мая 2019

Я знаю, что это немного любопытно. Потому что я верю, что если я углублюсь, я смогу получить это быстрее и за короткое время я смогу стать экспертом .. Сегодня некоторые вещи попались на глаза в модуле "stat" в python 3.7

Иногда нам нужен статус файла или каталога. Мы можем видеть это так.

>>>import pathlib as ph
>>>x=ph.Path('D://Music')
WindowsPath('D:/Music')
x.is_dir()
True

Нет проблем. Затем я захожу во внутреннюю часть pathlib для того, что происходит в начальном состоянии. И я знал, что я столкнусь с модулем статистики в нем.

если мы сделаем это:

x.stat()
#Then we will get a tuple like this
os.stat_result(st_mode=16749, st_ino=28147497........

Таким образом, модуль stat, чтобы выяснить, является ли данный адрес каталогом или файлом, принимает "st_mode", в этом случае это число 16749 И здесь начинается волшебство.

Следующие коды находятся внутри модуля статистики.

Наше число (16749) сначала пересекается с S_IFMT, поэтому будет & -ed со значением.

def S_IMODE(mode):
    """Return the portion of the file's mode that can be set by
    os.chmod().
    """
    return mode & 0o7777

def S_IFMT(mode):
    """Return the portion of the file's mode that describes the
    file type.
    """
    return mode & 0o170000

# Constants used as S_IFMT() for various file types
# (not all are implemented on all systems)

S_IFDIR  = 0o040000  # directory

если мы сделаем это вручную:

>>> 16749&0o170000
16384
>>> oct(16384)
'0o40000'     #really is that   S_IFDIR  = 0o040000  # directory

Похоже, что это значение исходит от встроенного уровня ОС, потому что его вернула статистика кортежа из файла x (st_mode). Так что вопрос в этом.

1. Откуда эти значения? как S_IFDIR, там несколько переменных хранят эти "октальные" значения, как это 0o040000.

2. Почему это восьмеричное число & ed, почему нет или xor?

Заранее благодарю за помощь.

...