Получить атрибуты файла (скрытый, только для чтения, системный, архивный) в Python

Только начал изучать Python. Как я могу получить статус атрибутов файла в Python? Я знаю, что os.chmod(fullname, stat.S_IWRITE) удалить атрибут только для чтения, но как я могу получить статус, не меняя его? Мне нужно получить все атрибуты "hidden", "system", "readonly", "archive"


person Evgeny Gerbut    schedule 28.11.2014    source источник
comment
какая операционная система, в Linux, например, скрытый файл — это любой файл с . в качестве первого символа имени, в Windows, хотя я думаю, что это атрибут файла.   -  person Tony Suffolk 66    schedule 29.11.2014


Ответы (3)


Вы можете напрямую использовать API Windows, например

import win32con
import win32api
attrs = win32api.GetFileAttributes(filepath)
attrs & win32con.FILE_ATTRIBUTE_SYSTEM
attrs & win32con.FILE_ATTRIBUTE_HIDDEN
person loopingz    schedule 30.10.2015
comment
Что делает часть attrs &? - person voices; 11.03.2019
comment
FileAttributes является целым числом флагов, поэтому вам нужно проверить каждый бит, каждый бит представляет собой логическое значение. - person loopingz; 11.03.2019

вам нужно взглянуть на модуль stat и os.stat

 os.stat(path)

Perform the equivalent of a stat() system call on the given path. (This function follows symlinks; to stat a symlink use lstat().)

The return value is an object whose attributes correspond to the members of the stat structure, namely:

    st_mode - protection bits,
    st_ino - inode number,
    st_dev - device,
    st_nlink - number of hard links,
    st_uid - user id of owner,
    st_gid - group id of owner,
    st_size - size of file, in bytes,
    st_atime - time of most recent access,
    st_mtime - time of most recent content modification,
    st_ctime - platform dependent; time of most recent metadata change on Unix, or the time of creation on Windows)
person Hackaholic    schedule 28.11.2014
comment
Где скрытый атрибут? - person Alex; 06.07.2020

Если вы используете Python 3.4+, вы можете использовать pathlib stat.

from pathlib import Path

print(Path(r"D:\temp\test.txt").stat())

Выход:

os.stat_result(
    st_mode=33206, 
    st_ino=204632308068721491, 
    st_dev=67555953, 
    st_nlink=1, 
    st_uid=0, 
    st_gid=0, 
    st_size=4, 
    st_atime=1550757968, 
    st_mtime=1550757968, 
    st_ctime=1550757951
)

дополнительная информация о os.stat_result

person Vlad Bezden    schedule 21.02.2019