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")
posted @ 2023-04-15 13:54  挖洞404  阅读(50)  评论(0编辑  收藏  举报