目录
前言
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的方法进行了功能分类,并提供了每个方法的实例演示,代码中有注释帮助读者理解,希望对大家有所帮助。由于作者水平有限,如有遗漏或笔误以及其他错误的地方,请帮忙批评指正。码字不易,希望大家多多点赞收藏!