Python的OS模块详解

目录

前言

一、os的常用方法

1.目录操作方法

2.文件操作方法

3.系统操作方法

二、os.path的常用方法

1.文件/目录名操作方法

2.文件属性方法

3.文件/目录测试方法

总结


前言

Python的OS模块可以帮助我们处理磁盘和文件系统,此外OS也提供方法让来调用操作系统的命令进行一些操作。OS模块的方法可以分为2个大类: os方法和os.path方法。下面分别介绍这2大类的常用方法。


一、os的常用方法

1.目录操作方法

使用os模块可以很方便地进行文件夹或者目录的操作,常用的目录操作方法如下表:

方法描述
os.getcwd()返回当前目录的字符串
os.chdir(path)切换当前目录到path目录,相当于os.system('cd path')
os.walk(path)

返回path 目录的(root,dir,file)的可迭代对象,可以用循环来遍历访问当前目录的每个文件。

os.listdir(path)返回path目录的子目录和文件的列表
os.mkdir(path)创建path目录

os.makedirs(path1/path2/...) 

创建多级目录
os.rmdir(path)删除path目录
os.rmdirs(path1/path2/...) 删除多级目录
os.rename(old,new)重命名path或者file

代码举例如下:

>>> os.getcwd() #返回当前目录的名称
'/home/user/Python/os'
>>> os.chdir('../') #切换到上层目录,使用相对路径
>>> os.getcwd()
'/home/user/Python'
>>> os.chdir('/home/user/Python/os') #切换到上层目录,使用绝对路径
>>> os.listdir(os.getcwd()) #列出路径的文件和文件夹
['hello.py', 'aa', 'file1', 'path1', 'test1']
>>> os.mkdir('test2') #创建test2文件夹
>>> os.listdir('.')
['hello.py', 'aa', 'test2', 'file1', 'path1', 'test1']
>>> os.rmdir('test2') #删除test2文件夹
>>> os.listdir('./')
['hello.py', 'aa', 'file1', 'path1', 'test1']
>>> os.rename('file1','file2') #重命名file1到file2
>>> os.listdir(os.getcwd())
['hello.py', 'aa', 'file2', 'path1', 'test1']
>>> for root,dir,file in os.walk(os.getcwd()):  #循环遍历当前目录的所有文件
...     print(root,dir,file)
... 
('/home/user/Python/os', ['aa', 'path1', 'test1'], ['hello.py', 'file2'])
('/home/user/Python/os/aa', ['bb'], [])
('/home/user/Python/os/aa/bb', ['cc'], [])
('/home/user/Python/os/aa/bb/cc', [], [])
('/home/user/Python/os/path1', ['path2'], [])
('/home/user/Python/os/path1/path2', ['path3'], [])
('/home/user/Python/os/path1/path2/path3', [], [])
('/home/user/Python/os/test1', [], [])

2.文件操作方法

os模块也可以对文件进行各种操作,常用的文件操作方法如下所示:

方法描述
os.stat(file)返回file的文件属性

os.chmod(path,mode)

设置文件的读写和可执行的属性
os.remove(file)删除文件,不能删除文件夹
os.unlink(file)删除文件,同os.remove(file)
os.open(file,flag)打开文件,标志为flag(如os.O_RDWR|os.O_CREAT)
os.close(fd)关闭文件
os.write(fd,string)将string写入文件fd,返回string的byte数
os.read(fd,buffersize)

read文件fd,返回当前地址往后buffersize的内容

os.link(src,dst)设置src一个hard link到dst,此后访问dst相当于访问src

代码举例如下:

>>> os.stat('file2') #返回file2的属性
posix.stat_result(st_mode=33279, st_ino=1179788, st_dev=2056, st_nlink=1, st_uid=1000, st_gid=1000, st_size=22, st_atime=1662897402, st_mtime=1662897361, st_ctime=1662897361)
>>> os.chmod('file2',0555) #修改file2的访问属性,只开启r-x,关闭w
>>> os.system('ls -l file2') #用系统命令显示file2的访问属性
-r-xr-xr-x 1 user user 22 9月  11 19:56 file2
0
>>> os.chmod('file2',0777) #修改file2的访问属性,开启rwx
>>> os.system('ls -l file2')
-rwxrwxrwx 1 user user 22 9月  11 19:56 file2
0
>>> os.remove('file2') #删除file2,注意只能删除文件不能删除文件夹
>>> os.listdir('./') #文件列表,file2已被删除
['hello.py', 'aa', 'path1', 'test1']
>>> fd=os.open('file2',os.O_CREAT|os.O_RDWR) #新建file2文件
>>> os.write(fd,"Hello world") #file2写入1个string,返回写入的byte数
11
>>> os.read(fd,11) #此时立马用os.read读没有值,猜测内存已经加到了内容末尾
''
>>> os.close(fd) #关闭file2文件
>>> fd=os.open('file2',os.O_RDONLY) #open file2文件,只读 
>>> os.read(fd,4) #读4byte数
'Hell'
>>> os.read(fd,5) #继续往后读5byte数,注意地址不会回到文件初始位置
'o wor'
>>> os.read(fd,11) #继续往后读11byte数,注意地址会累加
'ld'
>>> os.close(fd) #关闭文件句柄
>>> os.link('./file2','../file1') #将file2 硬链接到../file1

3.系统操作方法

除了文件和文件夹的操作,其他的对系统的操作常用方法如下:

方法描述
os.system(command)调用操作系统的command,如os.system('ls')相当于linux的ls指令。执行成功返回0,不成功返回非0
os.sep        返回操作系统的分隔符,注意没有括号
os.name返回你正在使用的工作平台,比如对于Windows,它是'nt',对于Linux/Unix用户,它是'posix',注意没有括号
os.getenv(key)返回key的环境变量,key是环境变量的字符串,无需加$

代码如下:

>>> os.system('ls') #调用系统的ls命令,执行成功返回0
aa  file2  hello.py  path1  test1
0
>>> os.system('aaaaaa') #system函数执行不成功返回非0
sh: 1: aaaaaa: not found
32512
>>> os.name #返回操作系统的name,注意不加括号
'posix'
>>> os.sep #返回操作系统的分隔符,注意不加括号
'/'
>>> os.getenv('PATH') #返回环境变量,变量不需要加$,字符串输入即可
'/home/user/.local/bin:./:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'

二、os.path的常用方法

os.path库相比于os库更侧重于文件名或者文件夹名操作,下面介绍常用的os.path的方法

1.文件/目录名操作方法

os.path的常用的文件名的操作方法如下表所示:

方法描述
os.path.abspath(file)返回file或者path的绝对路径
os.path.relpath(file)返回file或者path的相对路径
os.path.realpath(file)返回file或者path的真实路径,将软链接(symbolic link)拓展为真实路径
os.path.commonpath(paths)

返回paths列表的公共subpath,注意参数paths是list

os.path.commonprefix(paths)返回paths列表的公共prefix,注意参数paths是list
os.path.dirname(path)返回path的文件夹名

os.path.split(path)

分割path为路径和文件名,返回元组
os.path.join(a,path*)文件目录join在一起

下面是代码举例:

>>> os.path.abspath('file2') #返回file2的绝对路径
'/home/user/Python/os/file2'
>>> os.path.abspath('./') #返回当前目录的绝对路径
'/home/user/Python/os'
>>> os.path.relpath('/home/user/Python') #返回目录的相对路径
'..'
>>> os.path.relpath('/home/user/Python/file1') #返回文件的相对路径
'../file1'
>>> os.path.realpath('/usr/bin/python') #返回真实路径
'/usr/bin/python2.7'
>>> os.path.abspath('/usr/bin/python') #python为软链接,因此真实路径不一样
'/usr/bin/python'
>>> paths=['/usr/bin/python','/usr/bin/python3']
>>> os.path.commonpath(paths) #返回paths列表公共的path
'/usr/bin'
>>> os.path.commonprefix(paths) #返回paths列表公共的前缀(不一定是path)
'/usr/bin/python'
>>> os.path.dirname('/usr/bin/python') #返回目录名
'/usr/bin'
>>> os.path.split('/usr/bin/python') #拆分目录和文件,产生目录和文件的二元tuple
('/usr/bin', 'python')
>>> os.path.join('/usr/bin','python') #将参数通过分隔符/连接在一起形成一个path
'/usr/bin/python'
>>> os.path.join('/usr','bin','python') #将参数通过分隔符/连接在一起形成一个path
'/usr/bin/python'

2.文件属性方法

os.path的常用的文件属性获取方法如下表所示:

方法描述
os.path.getatime(file)返回file的访问(access)时间
os.path.getctime(file)返回file的创建(create)时间
os.path.getmtime(file)返回file的修改(modify)时间
os.path.getsize(file)返回file的文件大小

下面是代码举例:

>>> os.path.getatime('./file2') #返回文件file2的访问时间
1662898340.1811256
>>> os.path.getctime('./file2') #返回文件file2的创建时间
1662941806.2617452
>>> os.path.getmtime('./file2') #返回文件file2的修改时间
1662898056.20714
>>> os.path.getsize('./file2')  #返回文件file2的大小,字节数
11

3.文件/目录测试方法

os.path的常用的文件/目录测试方法如下表所示:

方法描述
os.path.exists(path)测试文件或者路径是否存在,存在返回True,否则False
os.path.isabs(path)测试文件或者路径是否绝对路径,是返回True,否则False
os.path.isdir(path)测试是否文件夹,是返回True,否则False
os.path.isfile(path)测试是否文件,是返回True,否则False
os.path.islink(path)测试是否软链接(symbolic link),是返回True,否则False
os.path.samefile(file1,file2)测试file1和file2是否指向同一文件,是返回True,否则False

下面是代码举例:

>>> os.path.exists('file2') #测试file2是否存在
True 
>>> os.path.exists('file3') #测试file3是否存在
False
>>> os.path.isabs('file3') #测试file3是否绝对路径
False
>>> os.path.isabs('/home/user/Python/os') #测试目录是否绝对路径
True
>>> os.path.isdir('/home/user/Python/os') #测试是否目录
True
>>> os.path.isdir('/home/user/Python/os/file2') #测试是否目录
False
>>> os.path.isfile('/home/user/Python/os/file2') #测试是否文件
True
>>> os.path.realpath('/usr/bin/python') #返回真实路径
'/usr/bin/python2.7'
>>> os.path.islink('/usr/bin/python') #测试是否link
True
>>> os.path.islink('/usr/bin/python2.7') #测试是否link
False
>>> os.path.samefile('/usr/bin/python','/usr/bin/python2.7') #测试是否指向同一文件
True


总结

本文将os和os.path的方法进行了功能分类,并提供了每个方法的实例演示,代码中有注释帮助读者理解,希望对大家有所帮助。由于作者水平有限,如有遗漏或笔误以及其他错误的地方,请帮忙批评指正。码字不易,希望大家多多点赞收藏!

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值