os模块目录操作详解
os模块是一个功能强大模块,主要提供操作系统相关功能接口,例如:文件目录操作,进程相关操作,执行系统命令,解析环境变量等。
使用os模块,我们首先要导入:
import os
下面我们对这些功能逐一介绍。
1:目录相关操作:目录相关常用操作如下表:
相关操作如下:
#开发环境ubuntu#获取当前目录dirname = 'test'pwd = os.getcwd()print('当前工作目录:',pwd)path = '/home/hyg/tmp'#获取指定文件夹下所有文件listf = os.listdir(path)print(f'{path}files:{listf}')#切换当前工作目录os.chdir(path)#查看当前路径:print('切换工作目录:',os.getcwd())#当前目录下创建目录os.mkdir(dirname)#显示当前目录下文件print(f'{path}files:{os.listdir("./")}')#删除目录:os.rmdir(dirname)#切回当前目录os.chdir(pwd)#显示当前目录print('当前工作目录:',pwd)
输出结果:
当前工作目录: /home/hyg/tmp/home/hyg/tmpfiles:['1.jpg', '2.jpg']切换工作目录: /home/hyg/tmp/home/hyg/tmpfiles:['test', '1.jpg', '2.jpg']当前工作目录: /home/hyg/tmp
2:os.path相关方法
这些方法包括目录判断,路径获取,路径拼接,文件信息获取;
2.1 文件判断这里我们要注意basename, split,来看两个例子:
def func(path): print(f'split :{path}, result:{os.path.split(path)}') print(f'basename:{path}, result:{os.path.basename(path)}')path = '/home/linux/test/1.txt'func(path)path = '/home/linux/test/'func(path)func('1.txt')
输出结果:
split :/home/linux/test/1.txt, result:('/home/linux/test', '1.txt')basename:/home/linux/test/1.txt, result:1.txtsplit :/home/linux/test/, result:('/home/linux/test', '')basename:/home/linux/test/, result:split :1.txt, result:('', '1.txt')basename:1.txt, result:1.txt
注意路径及输出格式。
关于目录拼接:很多代码实现如下面这种方式:
path = '/home/linux/test'fpath = path + '/' + '1.txt'print(fpath)
输出结果:
/home/linux/test/1.txt
这种方式问题:
1>跨平台问题,linux与window下目录表达方式不一样;
2>路径拼接,注意目录之间分隔符,有严格限制,容易出错;
我们可以使用下面这种方式:
path = '/home/linux/test/'fpath = os.path.join(path, '1.txt')print(fpath)path = '/home/linux/test'fpath = os.path.join(path, '1.txt')print(fpath)
输出结果:
/home/linux/test/1.txt/home/linux/test/1.txt
path的最后有没有反斜杠,join都可以处理,但是字符串拼接这种方式显然不行。
2.3 获取文件信息getctime与getmtime都是获文件最后修改时间,区别在哪里?文件修改方式:
1>文件内容修改;对两个方法获取时间都有影响;
2>文件权限,用户修改;只对getctime获取时间有影响;
使用Python代码验证:
import ospath = '/home/linux/test/1.txt'#获取文件修改时间print('ctime:',os.path.getctime(path), 'mtime:', os.path.getmtime(path))#修改文件权限os.chmod(path, 777)#获取文件修改时间print('ctime:',os.path.getctime(path), 'mtime:', os.path.getmtime(path))#获取文件大小print(os.path.getsize(path))
输出结果:
ctime: 1554518401.870203 mtime: 1554518401.870203ctime: 1554518438.9467654 mtime: 1554518401.8702035
3:其他一些方法方法 说明 os.system(command)执行命令os._exit(status)退出当前进程,需要添加退出状态os.getenv(key, default=None)获取指定环境变量os.putenv(name, value, /)设置指定环境变量os.environ环境变量获取与设置
os._exit可以直接让当前运行程序退出,并能够添加退出状态;
我们首先来看system的使用,我们要在一直指定目录创建文件,
linux下创建目录的shell 命令:touch fname;
path = '/home/linux/test/tmp'print(os.listdir(path))fname = os.path.join(path, '1.txt')print(fname)#创建文件os.system('/usr/bin/touch %s'%fname)print(os.listdir(path))
输出结果:
[]/home/linux/test/tmp/1.txt['1.txt']
可以看到使用system在path目录中创建文件。
下面再来看环境变量设置,这里我们有两种方式获取环境变量:
1>os.getenv,根据环境变量名称直接获取,如果没有获取值为None
2>os.environ,获取系统所有环境变量,可以使用字典方式去获取设置环境变量;
对应设置环境变量,os.putenv对于某些平台可能不支持,可以使用os.environ设置;
下面我们拉具体操作:
print('HOME=', os.getenv('HOME'))#设置环境变量os.putenv('Test', 'testval')#获取环境变量print('Test=', os.getenv('Test'))#使用environprint('environ[HOME]=', os.environ['HOME'])#设置环境变量Testos.environ['Test'] = 'testval'#获取环境变量print('Test=', os.getenv('Test'))
可以看到,在ubuntu中使用putenv不生效,我们可以使用os.environ替换。
os模块还有很多其他常用方法与属性,遇到问题可以查阅官网文档。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。