os der Python-Standardbibliothek

1. Einführung in die OS-Standardbibliothek

Wie der Name schon sagt, steht OS für Operating System, das Betriebssystem. Die OS-Standardbibliothek ist ein Betriebssystemschnittstellenmodul, das einige Funktionen bereitstellt, die die Verwendung von betriebssystembezogenen Funktionen erleichtern.Der spezifische Installationspfad kann durch Importieren des os-Moduls und Anzeigen der Eigenschaften ermittelt werden os.__file__. Wenn es notwendig ist, betriebssystembezogene Funktionen in Python-Code aufzurufen, um Geschäftslogik zu implementieren, oder Befehlszeilentools nicht direkt verwenden können, müssen wir den Import dieses Moduls in Betracht ziehen, sodass eine eingehende Untersuchung erforderlich ist.

2. Gemeinsame Funktionen und Attribute der OS-Standardbibliothek

2.1 Dateien und Verzeichnisse

2.1.1os.getcwd()

Gibt eine Zeichenfolge zurück, die das aktuelle Arbeitsverzeichnis darstellt

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

Bildbeschreibung hier einfügen

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

Erstellen Sie ein Verzeichnis namens path mit dem durch die Zahl angegebenen Berechtigungsmodus mode. Einige Systeme ignorieren mode.Wenn es nicht ignoriert wird, dann ist für das Linux-System die Berechtigung des neuen Ordners = der Berechtigungsmodus, der durch die angegebene Zahl dargestellt wird – die Standardberechtigung der umask des aktuellen Systembenutzers, wie unten gezeigt

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

    Entfernen (löschen) Sie den Verzeichnispfad . Eine FileNotFoundErroror OSError.

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

  • os.chdir(path)

    Ändern Sie das aktuelle Arbeitsverzeichnis in path

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

Bildbeschreibung hier einfügen

  • os.listdir(path='.')

    Gibt eine Liste mit den Namen aller Dateien und Verzeichnisse unter dem angegebenen Pfad in beliebiger Reihenfolge zurück, mit Ausnahme der Sondereinträge „.“ und „...“.

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

Bildbeschreibung hier einfügen

2.2 os.path gemeinsame Pfadoperationen

2.2.1os.path.abspath(path)

Gibt den absoluten Pfad (standardisiert) des Pfads path zurück, was einer Zeichenfolgenverkettung entspricht, und es wird kein Fehler gemeldet, wenn der Pfad path nicht vorhanden ist

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

2.2.2os.path.basename(path)

Gibt den Basisnamen des Pfads path zurück

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

2.2.3os.path.dirname(path)

Gibt den Verzeichnisnamen des Pfads path zurück

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

2.2.4os.path.exists(path)

Bestimmen Sie, ob Pfad auf einen vorhandenen Pfad oder einen geöffneten Dateideskriptor zeigt, geben Sie True zurück, wenn er existiert, und geben Sie False zurück, wenn er nicht existiert

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

2.2.5os.path.isabs(path)

Bestimmen Sie, ob der Pfad ein absoluter Pfad ist, geben Sie True zurück, wenn dies der Fall ist, geben Sie False zurück, wenn er nicht vorhanden ist oder nicht existiert. Unter Unix beginnt es einfach mit einem Schrägstrich, während es unter Windows mit einem Schrägstrich (oder Backslash) minus dem Laufwerksbuchstaben beginnen kann.

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

2.2.6os.path.isfile(path)

Geben Sie True zurück, wenn Pfad ein symbolischer Link zu einer vorhandenen Datei oder ein Pfad zu einer vorhandenen Datei ist. Gibt False zurück, wenn path ein Ordnerpfad ist oder nicht existiert.

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

Bildbeschreibung hier einfügen

Aus der obigen Abbildung ist ersichtlich, dass /opt/conda/bin/python ein symbolischer Link (Softlink) ist, der auf einen vorhandenen Dateipfad /opt/conda/bin/python3.7 verweist

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

2.2.7os.path.isdir(path)

Gibt True zurück, wenn Pfad ein symbolischer Link zu einem vorhandenen Ordner oder ein Pfad zu einem vorhandenen Ordner ist. Gibt False zurück, wenn path ein Dateipfad ist oder nicht existiert.

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

Aus der obigen Abbildung ist ersichtlich, dass es im Home-Verzeichnis des Root-Benutzers einen Softlink symlink2codennunet gibt, der auf einen vorhandenen Ordnerpfad verweist

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

2.2.8os.path.islink(path)

Gibt „True“ zurück, wenn „Pfad“ einen vorhandenen symbolischen Link darstellt, ansonsten „False“. Gibt immer False zurück, wenn die Python-Laufzeit keine symbolischen Links unterstützt

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Verbindet zwei oder mehr Pfadabschnitte und interpoliert nach Bedarf /. Wenn ein Teil des Parameters ein absoluter Pfad ist, wird der Pfad vor dem absoluten Pfad verworfen und die Verbindung beginnt mit dem absoluten Pfadteil. Wenn der letzte Teil leer ist, endet das Ergebnis mit einem Trennzeichen.

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

2.2.10os.path.normcase(path)

Normalisiert die Schreibweise von Pfadnamen. Wandeln Sie unter Windows alle Zeichen in Pfadnamen in Kleinbuchstaben und Schrägstriche in umgekehrte Schrägstriche um. Auf anderen Betriebssystemen wird der Pfad unverändert zurückgegeben.

Linux-Betriebssystem

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

Bildbeschreibung hier einfügen

Windows-Betriebssystem

Bildbeschreibung hier einfügen

2.2.11os.path.split(path)

Teilt den Pfad path in ein Paar (head, tail), wobei tail der letzte Teil des Pfads und head alles außer dem letzten Teil ist. Der Schwanzteil enthält keinen Schrägstrich, und wenn der Pfad mit einem Schrägstrich endet, ist der Schwanz leer. Wenn der Pfad keine Schrägstriche enthält, ist der Kopf leer. Wenn Pfad leer ist, sind Kopf und Ende leer. Nachfolgende Schrägstriche im Kopf werden entfernt, es sei denn, es handelt sich um das Stammverzeichnis (dh es enthält nur einen oder mehrere Schrägstriche).

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)))

Bildbeschreibung hier einfügen

2.2.12os.path.splitext(path)

Teilen Sie den Pfad path in ein Paar auf, nämlich (root, ext), so dass root + ext == path, wobei ext leer ist oder mit einem englischen Punkt beginnt und höchstens einen Punkt enthält. Punkte vor dem Pfad werden ignoriert, zB splitext('.cshrc') gibt ('.cshrc', '') zurück.

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)))

Bildbeschreibung hier einfügen

2.3 Andere allgemeine Befehle

2.3.1os.name

Der Name eines importierten Moduls, das von einem bestimmten Betriebssystem abhängt, gibt „posix“ für Linux, „nt“ für Windows und „java“ für die Java Virtual Machine zurück

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

Bildbeschreibung hier einfügen

2.3.2os.__file__

Gibt den absoluten Pfad der Installation des Betriebssystemmoduls als Zeichenfolge zurück

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

Bildbeschreibung hier einfügen

3. Referenzen

Acho que você gosta

Origin blog.csdn.net/m0_46223009/article/details/128065092
Recomendado
Clasificación