os模块目录操作详解

os模块是一个功能强大模块,主要提供操作系统相关功能接口,例如:文件目录操作,进程相关操作,执行系统命令,解析环境变量等。
使用os模块,我们首先要导入:

import os

下面我们对这些功能逐一介绍。

1:目录相关操作:

目录相关常用操作如下表:

方法 说明
os.getcwd() 获取当前脚本工作的目录路径
os.getcwdb() 同上,返回byte对象
os.chdir(path) 修改当前目录为path
os.mkdir(path, mode=0o777, *, dir_fd=None) 创建目录
os.makedirs(name, mode=0o777, exist_ok=False) 创建多层目录
os.rmdir(path, *, dir_fd=None) 删除目录
os.removedirs(name) 删除多级目录
os.listdir(path=‘.‘) 返回指定目录下所有文件
scandir(path=‘.‘) 返回迭代器,内容为指定目录下所有文件目录
os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True) 修改路径权限
os.rename(src, dst,...) os模块修改文件名

相关操作如下:

#开发环境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 文件判断

方法 说明
os.path.isdir(s) 判断是否为目录 ,如果为目录返回True
os.path.isfile(s) 判断是否为文件 ,如果为文件返回True
os.path.exists(path) 判断文件或目录是否存在 ,存在返回True

2.2 文件路径获取

方法 说明
os.path.dirname(path) 返回目录所在路径
os.path.split(p) 目录切分,返回元组(head,tail
os.path.basename(p) 返回最后一级目录
os.path.join(a, *p) 目录拼接
os.path.abspath(path) 获取文件绝对路径

这里我们要注意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.txt
split   :/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 获取文件信息

方法 说明
os.stat(path, *, dir_fd=None, follow_symlinks=True) 获取文件或目录信息
os.path.getatime(filename) 获取文件最后访问时间
os.path.getctime(filename)) 获取文件最后改变时间
os.path.getmtime(filename) 获取文件最后修改时间
os.path.getsize(filename) 获取文件大小

getctime与getmtime都是获文件最后修改时间,区别在哪里?文件修改方式:

1>文件内容修改;对两个方法获取时间都有影响;
2>文件权限,用户修改;只对getctime获取时间有影响;

使用Python代码验证:

import os
path = ‘/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.870203
ctime: 1554518438.9467654 mtime: 1554518401.870203
5

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‘))
#使用environ
print(‘environ[HOME]=‘, os.environ[‘HOME‘])
#设置环境变量Test
os.environ[‘Test‘] = ‘testval‘
#获取环境变量
print(‘Test=‘, os.getenv(‘Test‘))

可以看到,在ubuntu中使用putenv不生效,我们可以使用os.environ替换。
os模块还有很多其他常用方法与属性,遇到问题可以查阅官网文档。

原文地址:https://blog.51cto.com/huangyg/2375006

时间: 2024-10-08 23:41:26

os模块目录操作详解的相关文章

Python学习之os模块的使用详解

本文和大家分享的主要是python 中os 模块相关使用方法详解,一起来看看吧,希望对大家 学习python 有所帮助. os模块调用操作系统接口的模块 相关方法或属性: getcwd() ---  获取当前的操作目录,等同于 linux 中的 pwd 命令. 调用:os.getcwd() chdir() ---  改变 python 脚本的工作目录. 调用:os.chdir(path) (path 以字符串形式传入 ) 例如: >>> os.getcwd() 'C:\\Users\\B

Python对Excel操作详解

  Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl  tcom包对excel操作. 关键字: Python.Excel.xlrd.xlwt.xlutils.TCl.tcom     1 Python简介 Python是一种面向对象.直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.

[Android新手区] SQLite 操作详解--SQL语法

该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法  :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解析大部分标准SQL语言.但它也省去了一些特性并且加入了一些自己的新特性.这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的.查看关键字列表. 如下语法表格中,纯文本用蓝色粗体显示.非终极符号为斜体红色.作为语法一部分的运算符用黑色Roman字体表示. 这篇文档只是对SQLite实现的SQ

Android的file文件操作详解

Android的file文件操作详解 android的文件操作要有权限: 判断SD卡是否插入 Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); 获得sd卡根目录 File skRoot = Environment.getExternalStorageDirectory(); 获得私有根目录 File fileRoot = Context.getFilesDir()+""

Nuxt.js学习(二) --- Nuxt目录结构详解、Nuxt常用配置项、Nuxt路由配置和参数传递

[TOC] 1.Nuxt目录结构详解 Nuxt项目文件目录结构 |-- .nuxt // Nuxt自动生成,临时的用于编辑的文件,build |-- assets // 用于组织未编译的静态资源入LESS.SASS 或 JavaScript |-- components // 用于自己编写的Vue组件,比如滚动组件,日历组件,分页组件 |-- layouts // 布局目录,用于组织应用的布局组件,不可更改. |-- middleware // 用于存放中间件 |-- pages // 用于存放

Windows DIB文件操作详解-4.使用DIB Section

前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB,但是这又遇到一个问题,如果我想操作DIB的数据的话,显然是不能使用DDB:一是因为DIB转DDB时发生了颜色转换,再就是DDB无法直接提取指定像素点的数据.那么我们怎么办呢,Windows使用一种折中的方式来达到这一目标(既提高了显示效率和性能,又可以直接操作像素点). 1.DIB Section存储和显示 Windows使用DIB块(DIB Section)来存储DIB数据,其内存结构示意图如下 其实,和我们自己读入DIB数据到

DNS基本概念及操作详解----------------转载

DNS基本概念及操作详解 目录: 1.DNS协议 2.DNS查询 2.1递归查询 2.2跌代查询 2.3反向查询 3.域维护 3.1全量AXFR传输 3.2增量IXFR传输 3.3通过NOTIFY 3.4动态更新 4.DNS安全 在很多人看来,DNS只是为外部提供DNS解析服务(我以前也是这么认为的,直到膝盖中了一箭),但作为互联网的基础设施,DNS远没有想象的那么简单.如果你没有听说过DNS查询.反向解析.zone传输.动态更新.DNS安全,那你可以从本文中得到关于他们的最简明的诠释. 一.

Windows DIB文件操作详解-1.DIB的读入、保存和显示

DIB(设备无关位图)是存储在磁盘上的位图文件,可以从磁盘读到内存中或从内存保存到磁盘上,它的磁盘文件结构是标准化的,在Linux.Unix及Windows上都可以以同样效果显示.位图是最接近硬件的图像格式,Windows显示的核心是位图,它的SDK API专门提供了一组用于操作DIB文件的函数.但是由于这样或那样的原因,高效合理的使用这些DIB API是需要了解不少历史和使用背景的,在这里我抽茧剥丝介绍和演示DIB的使用,相信对你更好的使用DIB文件有帮助,由于DIB函数比较多,这里分为三部分

OSCache操作详解+标签使用

OSCache操作详解+标签使用 1.OSCache是什么?    OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能.OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案. 2.OSCache的特点   (1) 缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存. (2) 拥有全面的API:OSCache AP