Python の標準モジュールを使い、Windows のシステム情報や環境変数、ファイル情報を取得する方法

Windows のシステム情報や環境変数を、Python の標準モジュールを使って取得します。また、ファイルやフォルダの更新日時・サイズなどを取得する方法についても取り上げています。

動作確認環境:Windows10 64bit、Python 3.8.6


  1. Windows のシステム情報
  2. Windows の環境変数
  3. ファイルやフォルダの情報


1. Windows のシステム情報

CPUやOSの情報、MACアドレスなどです。取得した値を print 関数で表示したときの例も載せています。

使用する関数に応じて、必要なモジュールのみ import して使ってください。同様の情報が得られるものは、コメントで併記しています。

from multiprocessing import cpu_count
from os import getenv
from platform import machine, node, platform, processor, release, system, version
from socket import gethostbyname, gethostname
from uuid import getnode

# ==============================
_node = node()                                  # ネットワーク名
print(f'Network: {_node}')                      # Network: Kitchen

_machine = machine()                            # 機種
# _machine = getenv('PROCESSOR_ARCHITECTURE')
print(f'Machine: {_machine}')                   # Machine: AMD64

_processor = processor()                        # プロセッサ名 (CPU)
# _processor = getenv('PROCESSOR_IDENTIFIER')
print(f'Processor: {_processor}')               # Processor: Intel64 Family 6 Model 158 Stepping 12, GenuineIntel

_cpu_count = cpu_count()                        # CPU数
# _cpu_count = getenv('NUMBER_OF_PROCESSORS')
print(f'CPU count: {_cpu_count}')               # CPU count: 6

_proc_level = getenv('PROCESSOR_LEVEL')         # CPUファミリー
print(f'Processor level: {_proc_level}')        # Processor level: 6

_proc_revision = getenv('PROCESSOR_REVISION')   # CPUリビジョン
print(f'Processor revision: {_proc_revision}')  # Processor revision: 9e0c

_platform = platform()                          # プラットフォーム (OS) 情報
print(f'Platform: {_platform}')                 # Platform: Windows-10-10.0.18362-SP0

_system = system()                              # OS名
print(f'System: {_system}')                     # System: Windows

_release = release()                            # リリース情報
print(f'Release: {_release}')                   # Release: 10

_version = version()                            # バージョン情報
print(f'Version: {_version}')                   # Version: 10.0.18362

_mac = getnode()                                # MACアドレス
print(f'MAC Address: {_mac:_X}')                # MAC Address: ABCD_EF01_2345

_host_name = gethostname()                      # ホスト名
print(f'Host name: {_host_name}')               # Host name: Kitchen

_ip = gethostbyname(_host_name)                 # IPアドレス
print(f'IP Address: {_ip}')                     # IP Address: 192.168.100.100

MACアドレスやIPアドレスは、複数存在することがあります。上記の関数では、そのうちの1つしか取得できませんのでご注意ください。


2. Windows の環境変数

環境変数は、os モジュールの getenv 関数で取得します。上で出てきたもの以外を示します。

from os import getenv
# from pathlib import Path
# from tempfile import gettempdir

# ==============================
_computer_name = getenv('COMPUTERNAME')             # コンピュータ名
print(f'Computer name: {_computer_name}')           # Computer name: Kitchen

_user_domain = getenv('USERDOMAIN')                 # ドメイン名
print(f'User domain: {_user_domain}')               # User domain: Kitchen

_user_name = getenv('USERNAME')                     # ユーザー名
print(f'User name: {_user_name}')                   # User name: ユーザー名

_user_profile = getenv('USERPROFILE')               # ユーザープロファイル
# _user_profile = Path.home()
print(f'User profile: {_user_profile}')             # User profile: C:\Users\ユーザー名

_appdata = getenv('APPDATA')                        # Roaming フォルダ
print(f'Roaming: {_appdata}')                       # Roaming: C:\Users\ユーザー名\AppData\Roaming

_local_appdata = getenv('LOCALAPPDATA')             # Local フォルダ
print(f'Local: {_local_appdata}')                   # Local: C:\Users\ユーザー名\AppData\Local

_temp = getenv('TEMP')                              # Temp フォルダ
# _temp = gettempdir()
print(f'Temp: {_temp}')                             # Temp: C:\Users\ユーザー名\AppData\Local\Temp

_program_files = getenv('PROGRAMFILES')             # Program Files フォルダ
print(f'Program Files: {_program_files}')           # Program Files: C:\Program Files

_program_files_86 = getenv('PROGRAMFILES(X86)')     # Program Files (x86) フォルダ
print(f'Program Files (x86): {_program_files_86}')  # Program Files (x86): C:\Program Files (x86)

_root = getenv('SystemRoot')                        # Windows フォルダ
print(f'Root: {_root}')                             # Root: C:\WINDOWS

3. ファイルやフォルダの情報

作成日時や更新日時、サイズ等を取得します。Windows ではあまり意味のない項目もありますが、取得できるものは載せておきました。

from datetime import datetime
from pathlib import Path
from stat import filemode

# ==============================
# ------------------------------ パスの指定
_path = Path(__file__)  # 例として、実行している py ファイルを指定
# _path = Path.cwd()  # こちらの例では、カレントディレクトリを指定

# ------------------------------ サイズ
_size = 0

if _path.is_dir():  # ディレクトリサイズ
    for i in _path.glob('**/*'):
        try:
            _size += i.stat().st_size
        except PermissionError as err:  # アクセス権がないときのエラー
            print(f'{err.__class__.__name__}: {err}\n    {i}')

elif _path.is_file():  # ファイルサイズ
    _size = _path.stat().st_size

print(f'Size: {_size:,} byte')                    # Size: 2,524 byte

# ------------------------------ ステータス
_stat = _path.stat()

_create = datetime.fromtimestamp(_stat.st_ctime)  # 作成時刻
_create_ns = _stat.st_ctime_ns                    # 作成時刻 (ナノ秒)
print(f'Create: {_create}')                       # Create: 2020-09-25 14:03:19.830000
print(f'Create_ns: {_create_ns}')                 # Create_ns: 1601010199830000000

_modify = datetime.fromtimestamp(_stat.st_mtime)  # 更新時刻
_modify_ns = _stat.st_mtime_ns                    # 更新時刻 (ナノ秒)
print(f'Modify: {_modify}')                       # Modify: 2020-09-26 11:55:22
print(f'Modify_ns: {_modify_ns}')                 # Modify_ns: 1601088922000000000

_access = datetime.fromtimestamp(_stat.st_atime)  # アクセス時刻
_access_ns = _stat.st_atime_ns                    # アクセス時刻 (ナノ秒)
print(f'Access: {_access}')                       # Access: 2020-09-26 11:55:22
print(f'Access_ns: {_access_ns}')                 # Access_ns: 1601088922000000000

_mode = filemode(_stat.st_mode)                   # モード (権限) [-d]rwxrwxrwx
print(f'Mode: {_mode}')                           # Mode: -rw-rw-rw-

_index = _stat.st_ino                             # インデックス番号
print(f'Index: {_index}')                         # Index: 1234567890

_device = _stat.st_dev                            # パスが存在するデバイスの識別子
print(f'Device: {_device}')                       # Device: 9876543210

_nlink = _stat.st_nlink                           # ハードリンクの数
print(f'Hard link: {_nlink}')                     # Hard link: 1

_user_id = _stat.st_uid                           # ファイル所有者のユーザー識別子
print(f'User ID: {_user_id}')                     # User ID: 0

_group_id = _stat.st_gid                          # ファイル所有者のグループ識別子
print(f'Group ID: {_group_id}')                   # Group ID: 0

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

10 + 4 =