기사 디렉토리
- 1. OS 표준 라이브러리 소개
- 2. OS 표준 라이브러리 공통 기능 및 속성
-
- 2.1 파일과 디렉토리
- 2.2 os.path 공통 경로 작업
-
- 2.2.1 `os.path.abspath(경로)`
- 2.2.2 `os.path.basename(경로)`
- 2.2.3 `os.path.dirname(경로)`
- 2.2.4 `os.path.exists(경로)`
- 2.2.5 `os.path.isabs(경로)`
- 2.2.6 `os.path.isfile(경로)`
- 2.2.7 `os.path.isdir(경로)`
- 2.2.8 `os.path.islink(경로)`
- 2.2.9 `os.path.join(경로, *경로)`
- 2.2.10 `os.path.normcase(경로)`
- 2.2.11 `os.path.split(경로)`
- 2.2.12 `os.path.splitext(경로)`
- 2.3 기타 일반적인 명령
- 3. 참고문헌
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로 경로라는 디렉터리를 만듭니다. 일부 시스템은 모드를 무시합니다 무시하지 않으면 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
orOSError
.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)
경로 경로의 절대 경로(표준화)를 반환하며, 이는 문자열 연결과 동일하며 경로 경로가 존재하지 않는 경우 오류가 보고되지 않습니다.
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)
경로 경로의 기본 이름을 반환합니다.
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)
경로 경로의 디렉토리 이름을 반환합니다.
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)
경로가 기존 파일에 대한 심볼릭 링크이거나 기존 파일에 대한 경로이면 True를 반환합니다. 경로가 폴더 경로이거나 존재하지 않는 경우 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)
경로가 기존 폴더에 대한 심볼릭 링크이거나 기존 폴더에 대한 경로인 경우 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)
필요에 따라 보간하여 둘 이상의 경로 섹션을 결합합니다 /
. 매개변수의 일부가 절대경로이면 절대경로 앞의 경로는 버리고 절대경로 부분부터 연결을 시작한다. 마지막 부분이 비어 있으면 결과는 구분 기호로 끝납니다.
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에서는 경로 이름의 모든 문자를 소문자로 변환하고 슬래시를 백슬래시로 변환합니다. 다른 운영 체제에서는 경로가 수정되지 않은 상태로 반환됩니다.
리눅스 운영 체제
print("当前操作系统模块名为:{}".format(os.name))
windows_style_path=r"C:/Users\defaultuser0/APPData"
print("Windows路径规范化后为{}".format(os.path.normcase(windows_style_path)))
윈도우 운영체제
2.2.11os.path.split(path)
경로 경로를 쌍(머리, 꼬리)으로 분할합니다. 여기서 꼬리는 경로의 마지막 부분이고 머리는 마지막 부분을 제외한 모든 것입니다. 꼬리 부분에는 슬래시가 포함되지 않으며 경로가 슬래시로 끝나는 경우 꼬리는 비어 있습니다. 경로에 슬래시가 없으면 헤드가 비어 있습니다. 경로가 비어 있으면 머리와 꼬리가 모두 비어 있습니다. head의 후행 슬래시는 루트 디렉토리가 아니면 제거됩니다(즉, 하나 이상의 슬래시만 포함).
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)
경로 경로를 쌍, 즉 (root, ext)로 분할하여 루트 + ext == 경로가 되도록 합니다. 여기서 ext는 비어 있거나 영어 마침표로 시작하고 최대 하나의 마침표를 포함합니다. 경로 앞의 마침표는 무시됩니다. 예를 들어 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__))