技术标签: python 标准库 os 常用函数 linux Python
顾名思义,OS表示Operating System,即操作系统。OS标准库是一个操作系统接口模块,提供一些方便使用操作系统相关功能的函数,具体安装位置可通过导入os模块查看os.__file__
属性得到。当需要在Python代码中调用OS相关功能实现业务逻辑或者无法直接使用命令行工具时,我们就需要考虑导入此模块,因此有必要进行深入学习。
os.getcwd()
返回表示当前工作目录的字符串
print("当前工作目录为:{}".format(os.getcwd())) # 返回当前工作目录
os.mkdir(path, mode=0o777, *, dir_fd=None)
以指定数字表示的权限模式mode创建一个名为path的目录。某些系统会忽略 mode,如果没有忽略,那么Linux系统来说,新建文件夹的权限=指定数字表示的权限模式mode-当前系统用户的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)
移除(删除)目录 path。如果目录不存在或不为空,则会分别抛出 FileNotFoundError
或 OSError
异常。
os.rmdir("./cyr") # 删除空文件夹成功,无法查到cyr目录
!ls | grep cyr
os.rmdir("./why") # 删除不存在的文件夹FileNotFoundError报错
os.rmdir("./nnunet/") # 删除不为空文件夹OSError报错
os.chdir(path)
将当前工作目录更改为 path
print("切换前的当前工作目录为:{}".format(os.getcwd())) # 返回当前工作目录
dst_path="/root" # 目标文件夹
os.chdir(dst_path) # 将当前工作目录切换为/root
print("切换后的当前工作目录为:{}".format(os.getcwd())) # 返回当前工作目录
os.listdir(path='.')
返回一个包含指定path下所有文件和目录名称的按任意顺序排列的列表,特殊条目’.‘和’…'除外
dst_path="/code/" # 目标目录
dirs_ls=os.listdir(path=dst_path) # 获得指定目录下全部文件和文件夹名称列表
print(dirs_ls)
os.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)))
os.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)))
os.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)))
os.path.exists(path)
判断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)))
os.path.isabs(path)
判断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)))
os.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)))
os.path.isdir(path)
若path为指向一个已存在文件夹的符号链接或一个已存在文件夹路径,返回True。若path为一个文件路径或不存在路径,返回False。
ls /code/nnunet/ # 查看已存在文件夹路径/code/nnunet/
ln -s /code/nnunet/ ./symlink2codennunet # 当前目录即root下创建一个软链接指向一个已存在文件夹路径/code/nnunet/
ls -l /root/
由上图可知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)))
os.path.islink(path)
若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)))
os.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)))
os.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操作系统
os.path.split(path)
将路径 path 拆分为一对,即 (head, tail),其中,tail 是路径的最后一部分,而 head 里是除最后部分外的所有内容。tail 部分不会包含斜杠,如果 path 以斜杠结尾,则 tail 将为空。如果 path 中没有斜杠,head 将为空。如果 path 为空,则 head 和 tail 均为空。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)))
os.path.splitext(path)
将路径 path 拆分为一对,即 (root, ext),使 root + ext == path,其中 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)))
os.name
导入的依赖特定操作系统的模块的名称,返回’posix’表示Linux,'nt’表示Windows,'java’表示Java虚拟机
print("当前操作系统平台名称为{}".format(os.name))
os.__file__
以字符串形式返回os模块安装的绝对路径
import os
print("os模块安装绝对路径是{}".format(os.__file__))
文章浏览阅读2.1k次。大概说下原理,1.利用ListView的foo_安卓 listview 触底加载
文章浏览阅读4k次,点赞2次,收藏2次。需求来源于如何构建arm平台的Ubuntu文件系统。我们希望在ARM开发板上使用Ubuntu系统,那么就需要构建一个Ubuntu的根文件系统,基于该基础文件系统,进一步扩展开发。当然,也可能大部分的需求更多是来源于如何在host系统上构建arm环境,编译arm程序。殊途同归,问题都归结为一点,即如何在host系统上构建arm模拟环境。从上述构建文件系统需求出发,搜索到的资料无一例外的提到了chroot命令和qemu-arm-static安装包。具体思路是,安装qemu-arm-static安_arm模拟器
文章浏览阅读814次。网桥数据包的处理流程 网桥处理包遵循以下几条原则: 1. 在一个接口上接收的包不会再在那个接口上发送这个数据包; 2. 每个接收到的数据包都要学习其源地址; 3. 如果数据包是多播或广播包,则要在同一个网段中除了接收端口外的其他所有端口发送这个数据包,如果上层协议栈对多播包感兴趣,则需要把数据包提交给上层协议栈; 4._在一个接口上发出的包不会再在那个接口上发送这个报
文章浏览阅读2.8k次,点赞4次,收藏7次。**Todolist综合案例(一)Todolist Vue.js基本实现方法我们先明白todolist这个案例的基本实现方法循环遍历方法跟跟套用事件方法 比如 v-for v-if 这些常用的方法todolist案例实用各种项目 基本样式也不会太大变化 说白了就是在俄罗斯套娃我也是刚刚入门的新手首先我们先基本引入Vue.js的环境cnpm install -g @vue/cli然后在创建Vue的基本项目vue create myapp然后直接cd 进去项目myapp启动就行 c_vue 双击修改li内容
文章浏览阅读1.6w次,点赞11次,收藏10次。git clone git://github.com/lajos/iFrameExtractor.git错误信息:bower error status code of git: 128fatal: unable to connect to github.com:github.com[0: 你的IP]: errno=Operation timed out原因:需要用https才能读到数..._fatal: unable to connect to git.newcapec.cn: git.newcapec.cn[0: 192.168.0.19
文章浏览阅读1.5w次,点赞48次,收藏187次。居然有人干了5年开发,居然抓包都不会!但是不要怕,不要哭,跟着我学一定有收获! 兴趣就是你最好的老师,有兴趣就一定要学下去 ,卷死他们!_http抓包
文章浏览阅读3k次,点赞2次,收藏6次。Mac版配置VSCode的flutter开发环境(ios模拟机)下载flutter的SDK下载sdk并解压下载地址:https://github.com/flutter/flutter/releases把压缩包解压到自定义的目录 cd ~/Software unzip ~/Software/flutter-1.22.6.zip配置环境变量在~/.bash_profile文件添加以下环境变量 # flutter image export FLUTTER_HOME=/U_vscode 怎么使用ios模拟器
文章浏览阅读2.2k次。相信各位都有一种想要打人的节奏,每次编写代码,在代码编写好了之后,运行编译代码却出现窗口闪退的结果,下面,我将介绍几种解决Visual Studio 2012运行后窗口闪退方法。希望可以帮助大家解决这个问题。 方法一:运行程序时按 Ctrl +F5 ,然后运行程序。 此方法只是解决一般的闪退,菜鸟级的新手如果出现闪退,不_visual2012闪退
文章浏览阅读759次。第二章 世界地理一、海陆概况(一)七大洲(二)七大洲大小(三)大洲分界线(四)四大洋(五)海峡和运河二、山川湖泊(一)高原、平原、山脉(二)河流、城市与文明(三)世界之最第三章 中国地理一、中国地理概况1.位置半球维度海陆2.疆域面积四至临海3.邻国二、山形地貌(一)四大高原(二)四大盆地(三)三大平原(四)三大丘陵(五)名山大川1.五岳2.三山(六)宗教名山1.四大佛教名山2.四大道教名山(七)著名地貌1.喀斯特地貌2.丹霞地貌3.雅_重庆四川行测笔记汇总
文章浏览阅读186次。URP CommandBuffer.DrawMesh 渲染不正确的?_unity urp偏蓝
文章浏览阅读7.5k次,点赞7次,收藏34次。给自己立了很多flag,由于时间原因很多系列都还在写,算是循序渐进的总结。在程序化生成系列里,将会有如下记述:【1】程序化生成河流主要内容有@1 shader的自动调整(如河流的深浅,河水的波涛程度) @2 河流形状的调整,我们只需要编辑一条样条线,河流根据这条样条线自适应形状。【2】程序化生成森林主要内容有:@1用随机种子随机生成森林。减少美_虚幻4河流demo
文章浏览阅读6.2k次。1.系统目录用户目录存放用户登录后的配置文件Windows目录为系统安装目录 system32存放系统配置文件 config目录内的SAM文件存放用户的账户和密码,备份后删除该文件登录用户无需密码(需要使用第三方PE才能操作该文件) drives目录下 etc目录内的hosts文件存放用于解析域名的地址 program file(x86):64位操作系统才有的目录。32位应用程序安装于该目录 program file:应用程_目录后的............快捷键