Python 標準ライブラリの os

1. OS標準ライブラリの紹介

名前が示すように、OS はオペレーティング システム、オペレーティング システムの略です。OS 標準ライブラリは、オペレーティング システム関連の機能の使用を容易にするいくつかの機能を提供するオペレーティング システム インターフェース モジュールです. 特定のインストール場所は、os モジュールをインポートし、プロパティを表示することによって取得できますos.__file__. ビジネスロジックを実装するために Python コードで OS 関連の関数を呼び出す必要がある場合や、コマンドラインツールを直接使用できない場合は、このモジュールのインポートを検討する必要があるため、詳細な検討が必要です。

2. OS 標準ライブラリ共通の関数と属性

2.1 ファイルとディレクトリ

2.1.1os.getcwd()

現在の作業ディレクトリを表す文字列を返します

print("当前工作目录为:{}".format(os.getcwd())) # 返回当前工作目录

ここに画像の説明を挿入

2.1.2os.mkdir(path, mode=0o777, *, dir_fd=None)

番号で指定された許可モード mode で path という名前のディレクトリを作成します。一部のシステムはモードを無視します. 無視されない場合, Linux システムの場合, 次に示すように, 新しいフォルダの許可 = 指定された番号で表される許可モード - 現在のシステムユーザーの umask のデフォルトの許可, 以下に示すように

"""
Linux操作系统可通过umask命令获得4个八进制数表示的默认权限,root用户默认是0022,普通用户默认是 0002
第1位数代表文件所具有的特殊权限(SetUID、SetGID、Sticky BIT),后3位数表示表示umask权限值
分别对应所有者、用户组、其他人的权限值,权限与数字对应关系为:r->4,w->2,x->1
"""
exit_code=os.system("umask")

ここに画像の説明を挿入

"""
文件夹模式mode赋值为十进制511,等价于八进制0o777
"""
set_mode=511
os.mkdir(path="./cyr",mode=set_mode) # 在当前目录创建名为cyr的文件夹
# 长格式查看新创建的文件夹cyr可知其权限字符串为rwxr-xr-x,等价于转换后的数字权限111101101
!ls -l | grep cyr

ここに画像の説明を挿入

umask_value=0o0022 # 当前系统用户八进制表示umask默认权限
new_dir_mode=set_mode-umask_value
print("新建文件夹的权限为:{:b}".format(new_dir_mode))

ここに画像の説明を挿入

  • os.rmdir(path, *, dir_fd=None)

    ディレクトリパスを削除 (削除) します。ディレクトリが存在しない場合または空でない場合は、それぞれFileNotFoundErrorまたはOSError

    os.rmdir("./cyr") # 删除空文件夹成功,无法查到cyr目录
    !ls | grep cyr
    
    os.rmdir("./why") # 删除不存在的文件夹FileNotFoundError报错
    

ここに画像の説明を挿入

os.rmdir("./nnunet/") # 删除不为空文件夹OSError报错

ここに画像の説明を挿入

  • os.chdir(path)

    現在の作業ディレクトリをパスに変更します

    print("切换前的当前工作目录为:{}".format(os.getcwd())) # 返回当前工作目录
    dst_path="/root" # 目标文件夹
    os.chdir(dst_path) # 将当前工作目录切换为/root
    print("切换后的当前工作目录为:{}".format(os.getcwd())) # 返回当前工作目录
    

ここに画像の説明を挿入

  • os.listdir(path='.')

    特別なエントリ「.」と「...」を除いて、指定されたパスの下にあるすべてのファイルとディレクトリの名前を任意の順序で含むリストを返します。

    dst_path="/code/" # 目标目录
    dirs_ls=os.listdir(path=dst_path) # 获得指定目录下全部文件和文件夹名称列表
    print(dirs_ls)
    

ここに画像の説明を挿入

2.2 os.path 共通パス操作

2.2.1os.path.abspath(path)

パス path の絶対パス (標準化された) を返します。これは文字列の連結に相当し、パス path が存在しなくてもエラーは報告されません。

relative_path="tests/test_steps_for_sliding_window_prediction.py" # 路径path存在
print("{}对应的绝对路径为{}".format(relative_path,os.path.abspath(relative_path)))

ここに画像の説明を挿入

no_path="tests/none.py" # 路径path不存在
print("{}对应的绝对路径为{}".format(relative_path,os.path.abspath(no_path)))

ここに画像の説明を挿入

2.2.2os.path.basename(path)

パス path のベース名を返します

full_pathname="/proc/bus/pci/3a/08.0" # 路径path存在
print("全路径名称对应的文件名为{}".format(os.path.basename(full_pathname)))

ここに画像の説明を挿入

no_full_pathname="/demo/none.cpp" # 路径path不存在
print("全路径名称对应的文件名为{}".format(os.path.basename(no_full_pathname)))

ここに画像の説明を挿入

2.2.3os.path.dirname(path)

パス path のディレクトリ名を返します

full_pathname="/proc/bus/pci/3a/08.0" # 路径path存在
print("全路径名称对应的目录名称为{}".format(os.path.dirname(full_pathname)))

ここに画像の説明を挿入

no_full_pathname="/demo/none.cpp" # 路径path不存在
print("全路径名称对应的目录名称为{}".format(os.path.dirname(no_full_pathname)))

ここに画像の説明を挿入

2.2.4os.path.exists(path)

パスが既存のパスまたは開いているファイル記述子を指しているかどうかを判断し、存在する場合は True を返し、存在しない場合は False を返します。

full_pathname="/proc/bus/pci/3a/08.0" # 路径path存在
print("全路径名称对应的目录是否存在?{}".format(os.path.exists(full_pathname)))

ここに画像の説明を挿入

no_full_pathname="/demo/none.cpp" # 路径path不存在
print("全路径名称对应的目录是否存在?{}".format(os.path.exists(no_full_pathname)))

ここに画像の説明を挿入

2.2.5os.path.isabs(path)

パスが絶対パスかどうかを判断し、そうであれば True を返し、そうでないか存在しない場合は False を返します。Unix では単純にスラッシュで始まりますが、Windows ではスラッシュ (またはバックスラッシュ) からドライブ文字を引いたもので始めることができます。

abs_pathname="/proc/bus/pci/3a/08.0" # 路径path存在
print("全路径名称对应的目录是否为绝对路径?{}".format(os.path.isabs(abs_pathname)))

ここに画像の説明を挿入

rel_pathname="./nnunet/__init__.py" # 路径path是相对路径
print("全路径名称对应的目录是否绝对路径?{}".format(os.path.isabs(rel_pathname)))

ここに画像の説明を挿入

no_pathname="./nnunet/none.py" # 路径path是不存在
print("全路径名称对应的目录是否绝对路径?{}".format(os.path.isabs(no_pathname)))

ここに画像の説明を挿入

2.2.6os.path.isfile(path)

path が既存のファイルへのシンボリック リンクまたは既存のファイルへのパスである場合、True を返します。path がフォルダー パスであるか、存在しない場合は False を返します。

ls -li /opt/conda/bin/python* # 带inode节点信息并长格式查看python开头的文件和文件夹

ここに画像の説明を挿入

上の図から、/opt/conda/bin/python は、既存のファイル パス /opt/conda/bin/python3.7 を指すシンボリック リンク (ソフト リンク) であることがわかります。

abs_pathname="/opt/conda/bin/python3.7" # path为一个已存在文件路径
print("全路径名称对应的文件是否存在?{}".format(os.path.isfile(abs_pathname)))

ここに画像の説明を挿入

symbolic_link="/opt/conda/bin/python" # path为指向一个已存在文件/opt/conda/bin/python3.7的符号链接
print("全路径名称对应的文件是否存在?{}".format(os.path.isfile(symbolic_link)))

ここに画像の説明を挿入

abs_path="/opt/conda/bin/" # 文件夹路径
print("全路径名称对应的文件是否存在?{}".format(os.path.isfile(abs_path)))

ここに画像の説明を挿入

no_full_pathname="/demo/none.cpp" # 路径path不存在
print("全路径名称对应的文件是否存在?{}".format(os.path.isfile(no_full_pathname)))

ここに画像の説明を挿入

2.2.7os.path.isdir(path)

path が既存のフォルダーへのシンボリック リンクまたは既存のフォルダーへのパスである場合、True を返します。path がファイル パスであるか、存在しない場合は False を返します。

ls /code/nnunet/ # 查看已存在文件夹路径/code/nnunet/

ここに画像の説明を挿入

ln -s /code/nnunet/ ./symlink2codennunet # 当前目录即root下创建一个软链接指向一个已存在文件夹路径/code/nnunet/
ls -l /root/

ここに画像の説明を挿入

上の図から、ルート ユーザーのホーム ディレクトリに、既存のフォルダー パスを指すソフト リンク symlink2codennunet があることがわかります。

exist_dir_path="/code/nnunet/"# path为一个已存在文件夹路径
print("全路径名称对应的文件夹是否存在?{}".format(os.path.isdir(exist_dir_path)))

ここに画像の説明を挿入

exist_dir_symlink="/root/symlink2codennunet/"# path为指向一个已存在文件夹的符号链接
print("全路径名称对应的文件夹是否存在?{}".format(os.path.isdir(exist_dir_symlink)))

ここに画像の説明を挿入

exist_file_path="/opt/conda/bin/python3.7"# path为一个已存在文件路径
print("全路径名称对应的文件夹是否存在?{}".format(os.path.isdir(exist_file_path)))

ここに画像の説明を挿入

no_path="/demo/none.cpp" # 路径path不存在
print("全路径名称对应的文件夹是否存在?{}".format(os.path.isdir(no_path)))

ここに画像の説明を挿入

2.2.8os.path.islink(path)

パスが既存のシンボリック リンクを表す場合は True を返し、そうでない場合は False を返します。Python ランタイムがシンボリック リンクをサポートしていない場合は、常に False を返します。

exist_symbolic_link="/opt/conda/bin/python" # path为指向一个已存在的符号链接
print("全路径名称对应的符号链接是否存在?{}".format(os.path.islink(exist_symbolic_link)))

ここに画像の説明を挿入

no_symbolic_link="/demo/no_link" # path为指向一个不存在的符号链接
print("全路径名称对应的符号链接是否存在?{}".format(os.path.islink(no_symbolic_link)))

ここに画像の説明を挿入

exist_file_path="/opt/conda/bin/python3.7"# path为一个已存在文件路径
print("全路径名称对应的符号链接是否存在?{}".format(os.path.islink(exist_file_path)))

ここに画像の説明を挿入

exist_dir_path="/root/"# path为一个已存在文件夹路径
print("全路径名称对应的符号链接是否存在?{}".format(os.path.islink(exist_dir_path)))

ここに画像の説明を挿入

2.2.9os.path.join(path, *paths)

2 つ以上のパス セクションを結合し、必要に応じて補間します/パラメータの一部が絶対パスの場合、絶対パスより前のパスは破棄され、絶対パス部分から接続が開始されます。最後の部分が空の場合、結果は区切り文字で終了します。

previous_path,abs_dirname,basename,empty_part="model","/code","demo.py",""
print("参数中某个部分是绝对路径拼接后为{}".format(os.path.join(previous_path,abs_dirname,basename)))

ここに画像の説明を挿入

print("拼接两个或多个路径部分,按需要插入'/'拼接后为{}".format(os.path.join(previous_path,basename)))

ここに画像の説明を挿入

print("最后一部分为空以分隔符结尾{}".format(os.path.join(previous_path,basename,empty_part)))

ここに画像の説明を挿入

2.2.10os.path.normcase(path)

パス名の大文字と小文字を正規化します。Windows では、パス名のすべての文字を小文字に変換し、スラッシュをバックスラッシュに変換します。他のオペレーティング システムでは、パスは変更されずに返されます。

Linux オペレーティング システム

print("当前操作系统模块名为:{}".format(os.name))
windows_style_path=r"C:/Users\defaultuser0/APPData"
print("Windows路径规范化后为{}".format(os.path.normcase(windows_style_path)))

ここに画像の説明を挿入

Windows オペレーティング システム

ここに画像の説明を挿入

2.2.11os.path.split(path)

パス パスを (head、tail) のペアに分割します。tail はパスの最後の部分であり、head は最後の部分以外のすべてです。テール部分にはスラッシュは含まれず、パスがスラッシュで終わる場合、テールは空になります。パスにスラッシュがない場合、head は空になります。path が空の場合、head と tail の両方が空です。ルート ディレクトリでない限り、head の末尾のスラッシュは取り除かれます (つまり、1 つ以上のスラッシュしか含まれていません)。

norm_path="/nnunet/configuration.py" # 一般路径
ends_with_slash_path="/code/nnunet/" # 以斜杠结尾的路径
no_slash_path="HIP_Logo.png" # 没有斜杠的路径
empty_path="" # 空路径
root_path="/" # 根目录
print("一般路径head={},tail={}".format(*os.path.split(norm_path)))
print("以斜杠结尾的路径head={},tail={}".format(*os.path.split(ends_with_slash_path)))
print("没有斜杠的路径head={},tail={}".format(*os.path.split(no_slash_path)))
print("空路径head={},tail={}".format(*os.path.split(empty_path)))
print("根目录head={},tail={}".format(*os.path.split(root_path)))

ここに画像の説明を挿入

2.2.12os.path.splitext(path)

パス path を (root, ext) のペアに分割して、root + ext == path とします。ここで、ext は空であるか、英語のピリオドで始まり、最大で 1 つのピリオドを含みます。パスの前のピリオドは無視されます。たとえば、splitext('.cshrc') は ('.cshrc', '') を返します。

dir_path="/code/nnunet/" # 文件夹路径
multi_dot_file_path="/code/i.thy.py" # 包含多个句点的文件路径
single_dot_file_path="/code/we.py" # 包含单个句点的文件路径
starts_with_dot_file_path=".bashrc" # 以句点开头的路径
print("文件夹路径root={},ext={}".format(*os.path.splitext(dir_path)))
print("包含多个句点的文件路径root={},ext={}".format(*os.path.splitext(multi_dot_file_path)))
print("包含单个句点的文件路径root={},ext={}".format(*os.path.splitext(single_dot_file_path)))
print("以句点开头的路径root={},ext={}".format(*os.path.splitext(starts_with_dot_file_path)))

ここに画像の説明を挿入

2.3 その他の共通コマンド

2.3.1os.name

特定のオペレーティング システムに依存するインポートされたモジュールの名前。Linux の場合は 'posix'、Windows の場合は 'nt'、Java 仮想マシンの場合は 'java' を返します。

print("当前操作系统平台名称为{}".format(os.name))

ここに画像の説明を挿入

2.3.2os.__file__

os モジュールのインストールの絶対パスを文字列として返します

     import os
     print("os模块安装绝对路径是{}".format(os.__file__))

ここに画像の説明を挿入

3.参考文献

おすすめ

転載: blog.csdn.net/m0_46223009/article/details/128065092