Python-Relearning-os
sticky是
sticky值越大,顶置的文章越靠前thumbnail: “IMAGE_LINK”
redefine对首页文章添加缩略图
摘要
excerpt: “这是文章摘要 This is the excerpt of the post”或者直接设置为false
massage: 文章的密码的提示,但是似乎没有什么用,总是显示Hey,password is required here.
查看Python版本
在命令行中
系统的Python版本
windows+R打开cmd,输入python -V或者python --version,即可查看Python的版本,此版本是存入系统的环境变量的版本。anaconda 的Python版本
Windows键输入anaconda,调出来anaconda prompt的终端,此时进入到base环境中,可以输入conda env list,就可以查看所有的虚拟环境。然后输入
conda activate(空格)环境名,比如conda activate Python_relearning就可以激活对应的环境,接着就可以重复”系统的Python版本“的查看方法,输入python -V或者python --version,即可查看Python的版本。退出环境输入
conda deactivate即可,就可退出到base环境。
在python中查看
无论是在Pycharm中,还是在终端的python窗口中,都可以用下面的命令:
1 | import sys |
上述命令返回一个包含了版本号5个组成部分的元组,这5个部分分别是主要版本号(major)、次要版本号(minor)、微型版本号(micro)、发布级别(releaselevel)和序列号(serial)
如下:
1 | sys.version_info(major=3, minor=11, micro=0, releaselevel='final', serial=0) |
还可以直接用下面的简单的命令:
1 | import sys |
这个命令直接返回包含主版本和次版本的字符串,还包括发布公司等信息:
1 | 3.11.0 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:21) [MSC v.1916 64 bit (AMD64)] |
使用platform模块
详见本文的”platform模块“的内容
Pycharm乱码问题解决
更改文件编码设置
在Pycharm上方导航栏,找到文件,
文件——>设置——>编辑器——>文件编码
将设置统一改为”utf-8”,并且设置为”不含BOOM“,如下图所示:
更改Python文件模板
在Pycharm上方导航栏,找到文件,
文件——>设置——>编辑器——>文件和代码模板,在文件标签中找到”Python Script“
加入以下内容:
1 | #!/user/bin/env python3 |
如下图所示:
检查默认编码信息
使用sys库里面的函数getdefaultencoding(),即可查看编码信息:
1 | default_encoding = sys.getdefaultencoding() |
platform模块
platform模块是Python标准库的一部分,因此无需额外安装。只需在Python脚本中导入即可开始使用。
获取操作系统及计算机信息
1 | import platform |
获取python信息
1 | import platform |
路径的常识
“./“:代表目前所在的目录。
“ . ./“代表上一层目录。
“/“:代表根目录。
路径最后加/,比如”mypath/“表示在mypath文件夹下面,不加/,比如”mypath”,表示在mypath的上一级目录中。
“root/a/../b/../file.txt”实际路径是”root/file.txt”,因为a,b都被后面的../省略了,
但是”root/a../b/../file.txt”路径却是”root/a../file.txt”,因为a后面的../返回前一级目录,但是并不存在前一级目录(相比于上面一个例子少了一个/),所以把a..视为一个目录名字。
os模块
os.path——常用的路径操作
显示绝对路径
1 | # 绝对路径显示1 |
连接两个或更多的路径名组件
1 | # 连接两个或更多的路径名组件 |
如果参数中存在绝对路径或者以 “ \ “ 或“ / ”开头的路径,os.path.join() 会按顺序取最后的绝对路径或者 “ \ “ 或 “ / ” 开头的路径作为基础,并将其与其余的相对路径组合。
1 | path1='/a/b/c' |
检查指定的路径是否存在
返回布尔值
1 | exists = os.path.exists(r'E:\codes\Python\python_relearning') |
检查路径是否为文件
返回布尔值
1 | is_file = os.path.isfile(r'E:\codes\Python\python_relearning') |
检查路径是否为目录
返回布尔值
1 | is_dir = os.path.isdir(r'E:\codes\Python\python_relearning') |
获取路径中的最后一级目录 (basename)
如果最后一个是文件,则返回文件名
1 | base_name = os.path.basename(r'E:\codes\Python\python_relearning') |
获取文件路径 (dirname)
返回路径中的目录名。如果路径以目录名结尾,那么就是这个目录的路径。
1 | dir_name1=os.path.dirname(r'E:\codes\Python\python_relearning') |
分割目录名和文件名
仅仅是对于字符串的操作,以最后一个\为分隔符,返回元组
1 | dir_name, base_name = os.path.split(r'E:\codes\Python\python_relearning\os.path.py') |
分离文件名和扩展名
1 | filename, extension = os.path.splitext(r'E:\codes\Python\python_relearning\os.path.py') |
从绝对路径出发,找到相对路径
1 | # 第一个参数加\ |
关于加不加\,下面是AI生成的回答:
在您的代码示例中,您使用
os.path.relpath()函数计算相对路径,但是您提供的第一个参数(目标路径)的形式影响了结果。这里需要理解os.path.relpath()函数如何处理相对路径和绝对路径。
当第一个参数(目标路径)以反斜杠
\开头时,Python 在 Windows 系统上会将其解释为相对于当前驱动器的根目录的路径。因此,r'\os.path.py'实际上表示的是一个从当前驱动器根目录开始的路径。
下面是您的第一个代码示例的详细解释:
1
2 relative_path = os.path.relpath(r'\os.path.py', r'E:\codes')
print(f"Relative path: {relative_path}") # 输出:..\os.path.py
r'\os.path.py'被解释为从当前驱动器的根目录开始的路径。r'E:\\codes'是一个绝对路径。os.path.relpath()计算从r'E:\\codes'到r'\os.path.py'的相对路径,结果是..\os.path.py,因为os.path.py在E:\codes的上一级目录。
当第一个参数(目标路径)不以反斜杠
\开头时,它被视为相对于当前工作目录的路径。
下面是您的第二个代码示例的详细解释:
1
2 relative_path = os.path.relpath(r'os.path.py', r'E:\codes')
print(f"Relative path: {relative_path}") # 输出:Python\python_relearning\os.path.py
r'os.path.py'被解释为相对于当前工作目录的路径。r'E:\\codes'是一个绝对路径。os.path.relpath()计算从r'E:\\codes'到r'os.path.py'的相对路径。由于os.path.py被视为相对于当前工作目录的路径,假设当前工作目录是E:\codes\Python\python_relearning,则结果是Python\python_relearning\os.path.py。
请注意,第二个示例的输出取决于当前工作目录的实际位置。如果当前工作目录不是E:\codes\Python\python_relearning,则输出会有所不同。
因此,确保您了解os.path.relpath()如何处理不同类型的路径,并正确提供目标路径和起始路径。
规范路径
os.path.normpath() 函数用于规范化路径名,它将解析路径中的多余分隔符和上级目录引用(如 ..)。下面是该函数的具体行为和规则:
解析路径分隔符:它会将路径中的多个连续路径分隔符(例如
/或\)替换为单个路径分隔符。解析当前目录引用:它会移除路径中的
.,这代表当前目录。解析上级目录引用:它会移除路径中的
..,这代表上级目录,同时也会移除..前面的目录名,除非..指向根目录。
例程如下:
1 | normalized_path = os.path.normpath(r'path/to\.\\ignored\..\test.txt') |
更多例程:
1 | normalized_path_0 = os.path.normpath(r'a../b..\file.txt') |
OS模块其他功能
汇总 查找表
1 | os.mknod("text.txt"):创建空文件 |
获取当前工作目录
1 | os.getcwd() |
返回绝对路径
列出目录下所有的文件和子目录
1 | os.listdir(path) |
返回指定的文件夹包含的文件或文件夹的名字的列表,列表以字母序。
更改工作目录
1 | os.chdir(path) |
如果允许访问返回 True , 否则返回False。
创建一个新目录
1 | os.mkdir(path) |
用于创建目录,而不能创建文件
递归创建多级目录
1 | os.makedirs(name, mode=511, exist_ok=False) |
- exist_ok:是否在目录存在时触发异常。如果 exist_ok 为 False(默认值),则在目标目录已存在的情况下触发 FileExistsError 异常;如果 exist_ok 为 True,则在目标目录已存在的情况下不会触发 FileExistsError 异常。
- 无返回值
删除空的目录
1 | os.rmdir(path) |
用于删除指定路径的目录。仅当这是文件夹是空才可以, 否则, 抛出OSError。并且不能删除多级目录,如果传入参数是多级目录,仅仅会删除掉最后一级目录。
递归删除多级空目录
1 | os.removedirs(path) |
同样,要求目录为空
列出包含的文件或者文件夹列表
1 | os.listdir(path) |
列表以字母顺序。 它不包括 . 和 .. 即使它在文件夹中。
删除指定路径的文件
1 | os.remove(path) |
path指向的路径必须是文件,如果指定的路径是一个目录,将抛出OSError。
重命名文件或者目录
1 | os.rename(src, dst) |
src — 要修改的目录名或者文件路径
dst — 修改后的目录名或者文件路径
1
2
3
4
5
6
7
8
9
10import os
# 设置要创建的目录路径
path = "aa/bb/cc"
# 创建目录
os.makedirs(path, exist_ok=True)
# 修改目录名称
os.renames(path,'1/2/3')
检查访问权限
1 | os.access(path, mode); |
path — 要用来检测是否有访问权限的路径。
mode —
mode为F_OK,测试存在的路径,或者它可以是包含R_OK,W_OK和X_OK或者R_OK,W_OK和X_OK其中之一或者更多。- os.F_OK: 作为
access()的mode参数,测试path是否存在。 - os.R_OK: 包含在
access()的mode参数中 , 测试path是否可读。 - os.W_OK 包含在
access()的mode参数中 , 测试path是否可写。 - os.X_OK 包含在
access()的mode参数中 ,测试path是否可执行。
- os.F_OK: 作为
更改文件或目录的权限
1 | os.chmod(path, mode) |
path — 文件名路径或目录路径。
flags — 可用以下选项按位或操作生成, 目录的读权限表示可以获取目录里文件名列表, ,执行权限表示可以把工作目录切换到此目录 ,删除添加目录里的文件必须同时有写和执行权限 ,文件权限以用户id->组id->其它顺序检验,最先匹配的允许或禁止权限被应用。
- stat.S_IXOTH: 其他用户有执行权0o001
- stat.S_IWOTH: 其他用户有写权限0o002
- stat.S_IROTH: 其他用户有读权限0o004
- stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007
- stat.S_IXGRP: 组用户有执行权限0o010
- stat.S_IWGRP: 组用户有写权限0o020
- stat.S_IRGRP: 组用户有读权限0o040
- stat.S_IRWXG: 组用户有全部权限(权限掩码)0o070
- stat.S_IXUSR: 拥有者具有执行权限0o100
- stat.S_IWUSR: 拥有者具有写权限0o200
- stat.S_IRUSR: 拥有者具有读权限0o400
- stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700
- stat.S_ISVTX: 目录里文件目录只有拥有者才可删除更改0o1000
- stat.S_ISGID: 执行此文件其进程有效组为文件所在组0o2000
- stat.S_ISUID: 执行此文件其进程有效用户为文件所有者0o4000
- stat.S_IREAD: windows下设为只读
- stat.S_IWRITE: windows下取消只读
获取文件或者目录的状态信息
1 | os.stat(path) |
返回值
stat 结构:
- st_mode: inode 保护模式
- st_ino: inode 节点号。
- st_dev: inode 驻留的设备。
- st_nlink: inode 的链接数。
- st_uid: 所有者的用户ID。
- st_gid: 所有者的组ID。
- st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
- st_atime: 上次访问的时间。
- st_mtime: 最后一次修改的时间。
- st_ctime: 由操作系统报告的”ctime”。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
遍历指定目录及其所有子目录
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
参数
top — 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
- files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
topdown —可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
onerror — 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
followlinks — 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。
返回生成器。
假设我们有下面的目录结构:
1 | +--A |
其中A文件夹和执行程序的Python文件放在同一个目录下面
1 | start_path='A' |
将三元组分别转化为列表打印输出
1 | start_path='A' |
过滤特定格式文件
如下:
1 | start_path='A' |



