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.环境变量

type(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.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所指向的文件或者目录的最后修改时间

相关