os模块
os模块
# 获取值
os.sep # 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"★★
os.linesep # 输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
os.pathsep # 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.curdir # 返回当前目录: ('.')
os.pardir # 获取当前目录的父目录字符串名:('..')
1.环境变量
os.environ() 如果环境变量不存在,则引发异常。
os.getenv() 不引发异常,但返回None。
type(os.environ) # <class 'os._Environ'>
# 获取
os.environ["xxx"] # 不存在报错
os.environ.get('xxx','ss') # 推荐使用get(可以设置默认值)
os.environ.keys() # KeysView(environ()) 可以for循环
os.environ.values() # ValuesView(environ())
os.environ.items() # ItemsView(environ())
os.getenv('key_name')
os.getenvb('key_name')
# 设置
os.environ.setdefault('xx', "xx") # 添加(如果存在不修改)
os.environ["xx"] = "xx" # 添加/修改
# 删除
del(os.environ["xxx"])
2.执行命令
返回
0表示成功
,其他都是失败
os.system("pwd") -> int
3.路径相关
获取路径
getcwd ⚠️⚠️⚠️需要注意
os.getcwd() # 获取Python3 xxx.py命令执行时的路径
os.path.abspath(__file__) # 获取脚本路径(当前文件)
os.path.realpath(__file__) # 获取脚本路径(当前文件的源文件)
os.path.basename(os.path.abspath(__file__)) # 获取路径最后一个的名字(文件名或文件夹名)
os.path.dirname(os.path.abspath(__file__)) # 获取父级路径
案列realpath和realpath的区别
当判断一个文件是快捷方式的文件(软链接)时,
realpath会找到对应的源文件,
而abspath只会显示当前文件的路径(如快捷文件,只会显示桌面快捷图标的路径)
print(os.path.realpath('/usr/bin/python'))
# /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
print(os.path.realpath('/usr/bin/python3'))
# usr/bin/python3
print(os.path.abspath('/usr/bin/python'))
# /usr/bin/python
print(os.path.abspath('/usr/bin/python3'))
# /usr/bin/python3
切换路径
相当于shell下cd
os.chdir("dirname")
路径分割
print(os.path.split(os.path.abspath(__file__)))
# ('/Users/lxd670/test_main/nkippis', 'c.py')
print(os.path.dirname(os.path.abspath(__file__)))
# /Users/lxd670/test_main/nkippi
print(os.path.basename(os.path.abspath(__file__)))
# c.py
路径拼接
# 多个路径拼接
os.path.join(path1, path2)
# 注意
4.获取目录下的名称
listdir
获取目录下的所有文件和子目录,包括隐藏文件,返回
list
# 扫描当前目录下
os.listdir()
# 扫描指定目录下
os.listdir('/xxx')
walk
递归遍历当前文件夹下所有文件
os.walk(path)
# 用法
for root, dirs, files in os.walk(path):
print('-----root-----')
print(root) # 第一次root就是path,然后就是所有的文件夹(root是在变化的)
print('-----dirs-----')
for name in dirs:
dir_name = os.path.join(root, name) # 获取root当前目录下的[文件夹名]
print(dir_name)
print('-----files-----')
for name in files:
file_name = os.path.join(root, name) # 获取root当前目录下的[文件名]
print(file_name)
5.判断
返回
True
/False
路径是否存在
os.path.exists(path)
是否是绝对路径
os.path.isabs(path)
是否是文件
os.path.isfile(path)
是否是路径
os.path.isdir(path)
6.文件夹相关
创建空文件夹
# 创建一个空文件(单个)
os.mkdir('dirname1')
# 创建多级空文件(多个)
os.makedirs('dirname1/dirname2')
重命名文件夹
适用于文件
os.rename("oldname", "newname")
拷贝
shutil.copyfile("oldfile", "newfile") #oldfile和newfile都只能是文件
shutil.copy("oldfile", "newfile") #oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
shutil.copytree("olddir", "newdir") #olddir和newdir都只能是目录,且newdir必须不存在
删除空文件夹
# 删除不是空文件夹会报错(单个)
os.rmdir('dirname')
# 递归删除空文件(多个)
os.removedirs('dirname11/dirname22')
# 空目录、有内容的目录都可以删
shutil.rmtree("dirname")
移动文件夹
shutil.move("oldpos", "newpos")
7.文件的操作
创建文件
# 创建空文件
os.mknod("test.txt")
open("test.txt","w")
文件重命名
也适用于目录
os.rename("oldname","newname")
删除文件
os.remove()
返回文件后缀
print(os.path.splitext(__file__))
# ('/Users/lxd670/test_main/nkippis/c', '.py')
print(os.path.splitext(__file__)[-1])
# .py
获取文件信息
os.stat(__file__)
"""
st_mode=33188 表示文件类型和文件模式位(权限)。
st_ino=62957345 它表示Unix上的inode编号和Windows平台上的文件索引。
st_dev=16777233 它代表此文件所在设备的标识符。
st_nlink=1 它表示硬链接的数量。
st_uid=502 它代表文件所有者的用户标识符。
st_gid=20 它代表文件所有者的组标识符。
st_size=1078 它表示文件的大小(以字节为单位)。
st_atime=1655398924 它表示最近访问的时间。以秒为单位。
st_mtime=1655398923 它表示最近一次内容修改的时间。以秒为单位。
st_ctime=1655398923 它表示Unix上最近的元数据更改时间以及Windows上的创建时间。以秒为单位。
st_atime_ns: 与st_atime相同,但是时间以纳秒为单位表示为整数。
st_mtime_ns:与st_mtime相同,但时间以纳秒为单位表示为整数。
st_ctime_ns: 与st_ctime相同,但时间以纳秒为单位表示为整数。
st_blocks: 代表分配给文件的512字节块的数量。
st_rdev: 表示设备类型,如果是inode设备。
st_flags: 它代表用户定义的文件标志。
"""
# 获取大小
os.stat(__file__).st_size
获取文件大小
返回
int
类型
# 返回值2765
os.path.getsize('/xxx/clinet.py')
os.stat('/xxx/clinet.py').st_size
获取修改/存取时间
os.path.getatime(path) # 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) # 返回path所指向的文件或者目录的最后修改时间