python3 os模块
1、介绍
(1)os模块是python中的一个内部模块。用于处理与系统相关的函数和类。
(2)os模块支持windows和linux,在os模块中一般是用NT和Posix分别指windows和linux。
在不同系统中,会调用不同具体的模块实现。
(3)目前主要使用os.listdir函数和os.path下的函数
2、os.path
通过os.path可以调用很多有用的函数。其本身是一个module类对象,与所在操作系统相关,windows下为ntpath.py进行初始化。
print(os.path)
print(type(os.path))
<module 'ntpath' from 'C:\\Users\\tongjie\\AppData\\Local\\Programs\\Python\\Python39\\lib\\ntpath.py'>
<class 'module'>
2.1 判断
# 判断文件存在
# print(os.path.exists("I:"))
# 判断是否为存在的目录,如果不存在,或存在但不是目录,都返回False
# print(os.path.isdir("i:"))
# print(os.path.isdir("I:\\20220825"))
# print(os.path.isfile("I:\\20220825"))
# 判断是否为存在的文件,如果不存在,或存在但不是文件,都返回False
# print(os.path.isfile("I:\\20220825\\ab.txt"))
# print(os.path.isfile("I:\\20220825\\abc.txt"))
# 判断是否是绝对路径,是否存在和文件类型不影响,需要注意以/或\开头的路径会判断为绝对路径
# print(os.path.isabs("I:\\20220825a"))
# print(os.path.isabs("a25"))
# 以及判断是否为链接文件和装载文件类型(u盘?)
# print(os.path.islink())
# print(os.path.ismount())
2.2 获取
(1)获取文件名称或目录名称
- 参数指向的目录或文件是否存在,不影响
- 如果参数是识别为盘符,比如j:,那么返回空字符串
- 如果参数是直接的名称,比如j,那么返回字符串j
- 如果参数以分隔符结尾,那么返回空字符串
- 如果参数不以分隔符结尾,则返回最后一级内容,目录名称或者文件名称
# 获取最低一层的文件或目录名称,是否存在不影响
# print(os.path.basename("I:\\20220825\\ab.txt"))#ab.txt
# print(os.path.basename("I:\\20220825\\"))#""
# print(os.path.basename("I:\\20220825"))#20220825
(2)获取目录名称
- 参数指向的目录或文件是否存在,不影响
- 如果参数是识别为盘符,比如j:,那么直接返回该参数。
- 如果参数是直接的名称,比如j,那么返回空字符串
- 如果参数以分隔符结尾,那么返回直接返回不包含结尾分隔符的部分
- 如果参数不以分隔符结尾,则直接返回上一级的绝对目录
# 获取目录的路径
print(os.path.dirname('j:')) # j:
print(os.path.dirname('j:/')) # j:/
print(os.path.dirname('j://')) # j://
print(os.path.dirname('j:\\')) # j:\
print(os.path.dirname('j:\\\\')) # j:\\
# print(os.path.dirname("I:\\20220825\\ab.txt")) # I:\20220825
# print(os.path.dirname("I:\\20220825\\")) #I:\20220825
# print(os.path.dirname("I:\\20220825"))# I:\
print(os.path.dirname('I:\\/20220825//c\\ab.tx')) # I:\/20220825//c
# print(os.path.abspath("")) # 获取当前代码py文件所在目录的绝对路径,F:\code_audit
(3)执行py的路径
os.path.abspath(__file__)
K:\abc\w_t\t2.py
os.path.dirname(os.path.abspath(__file__))
K:\abc\w_t
- 输出代码所在py文件的绝对路径,即使是其它包调用该py文件,输出也不会变化
- __file__和空字符串,并不等价。
- 空字符串参数用于获取py文件所在的项目路径,同一项目下的不同路径会获取到相同的项目路径
- 如果类a中的方法p定义abspath(__file__),类b继承类a,调用self.p方法。获取的是a所在py文件的路径
2.3 文件信息
(1)getsize函数
- 获取文件大小,单位是字节,int类型
- 如果是指定为不存在的路径,会报错
- 指定为目录或者刚创建的空的文本文件.txt,即不存在内容,会返回0。文件中只要一个字符,都显示1kb
- 指定为一般的文本文件,比如.txt,返回其文本内容占据的字节数。比如一个ascii字符占一个字节,一个utf-8编码的中文字符占3个字节
print(os.path.getsize("I:\\20220825\\ab.txt"))
(2)获取文件的相关时间
- 返回类型是float,1670575951.5106602形式
- 指定参数可以是目录或一般文件,但如果不存在,会报错
- ctime是创建时间crate,atime是访问时间access,mtime是修改时间modify
print(os.path.getmtime("I:\\20220825"))
print(os.path.getatime("I:\\20220825"))
print(os.path.getctime("I:\\20220825"))
3、os直接函数
这里整理一些os模块下直接调用的函数。
3.1 os.listdir
- 作用是获取指定的存在的目录下的一级子目录或文件名称,包括隐藏文件和目录
- 返回类型是list,元素为str类型,是文件名称或目录名称,而非路径。
- 指定参数是str类型,表示存在的目录,否则会报错
- 参数指向目录,但不存在,报错
- 参数指向文件,报错
- 参数为..,表示当前程序启动的py文件的所在目录,可行
- 参数为空字符串'',报错
- 指定参数的目录下不存在子文件或子目录时,返回空列表[]
- python中识别路径,相当的冗余
- \和/并不区分
- 多个\和/被识别为一个分隔符
- 末尾是否添加分隔符,不影响
- 盘符后可以加分隔,也可以不加,即使存在盘符后存在子目录
j 报错,不存在
j:、j:\、j:/、j:\\、j://、j:/\、j:\/ 等价,正常查询
j:a、j:\a、j:/a、j:\\a、j://a、j:\/a、j:/\a
j:a\、j:\a\、j:/a\、j:\\a\、j://a\、j:\/a\、j:/\a\
j:a/、j:\a/、j:/a/、j:\\a/、j://a/、j:\/a/、j:/\a/
j:/a//、j:/a///
这些也都是等价,正常查询
# 如果启动py文件在F盘,那么该盘的使用存在一些问题
os.listdir('F:') # 会指向启动py所在目录
os.listdir('F:web') # 会报错不存在目录,实际是启动所在目录下没有web目录,虽然F盘下存在
# 其他写法都参考前面的,是可以等价的。综合来说,盘符记为F:/或J:/的形式,而其下的记为F:/WEB或J:/WEB
3.2 os.mkdir
- 作用是创建目录
- 可以只传递一个参数,str类型,表示创建目录的路径,可以是绝对路径,也可以是相对路径
- 如果指定目录已经创建,会报错。如果指定目录的父目录中未创建,也会报错
示例:
os.mkdir("abc")
3.3 os.makedirs
- 作用是创建目录
- 可以只传递一个参数,str类型,表示创建目录的路径,可以是绝对路径,也可以是相对路径
- 如果指定目录已经创建,会报错。如果指定目录的父目录中未创建,会自动创建父目录路径中的一个或多个目录
示例:
os.makedirs("ab\\d")