Python OS模块详解

前言

Python标准库中的OS模块,提供一种可移植的方式(程序与平台无关)来使用依赖于操作系统的功能。简而言之,os模块提供了许多能够直接操纵不同的操作系统的Python接口。一个操作系统所能提供的常用命令行接口,在os模块中基本都能做到。本篇主要是对os模块中常用属性和方法的记录。想了解更详细的使用推荐使用Python中文文档,点这里。

软件环境

  • 系统 
    • RHEL 7
  • 软件 
    • Pyhon 27

os模块内建属性

os.name 获取执行平台的类型

操作系统相关模块的名字。目前已经注册以下的名字:’posix’、’nt’、’os2’、’ce’、’Java’、’riscos’。 
如果执行平台是window,则os.name == "nt",如果是Linux/Unix,则os.name == 'posix'

>>> os.name
'posix'
  • 1
  • 2
  • 1
  • 2

POSIX :表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。

os.linesep 输出当前平台使用的行终止符

也称之为换行符,windows下为”\t\n”,Linux下为”\n

>>> os.linesep
'\n'
  • 1
  • 2
  • 1
  • 2

os.sep 输出操作系统特定的路径分隔符

目录层之间的分隔符

>>> os.sep
'/'
  • 1
  • 2
  • 1
  • 2

os.pathsep 输出用于分割文件路径的字符串

>>> os.pathsep
':'
root@localhost workspace]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/workspace:/root/bin   #在Linux中路径以':'来分隔
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

Other

os.curdir 返回当前目录: (‘.’) 
os.pardir 获取当前目录的父目录字符串名:(‘..’) 
os.R_OK/os.W_OK/os.X_OK 文件权限模式。他们的值分别是:4/2/1 
os.environ 获取系统环境变量

os模块内建方法

文件或目录的路径操作方法

os.getcwd() 获取当前工作目录

获取当前工作目录的绝对路径。

>>> os.getcwd()
'/opt/workspace'`
  • 1
  • 2
  • 1
  • 2

os.path.exists() 判断一个路径是否存在

如果path存在,返回True;如果path不存在,返回False。常用于在对一个文件做操作之前的判断依据。

>>> os.path.exists("/opt/workspace/tab.py")
True
  • 1
  • 2
  • 1
  • 2

os.path.isfile() 判断指定对象是否为文件

是返回True,否则False

>>> os.path.isfile("tab.py")
True
>>> os.path.isfile("testMkdir")
False
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

os.path.isdir() 判断指定对象是否为目录

是True,否则False。

>>> os.path.isdir("testMkdir")
True
>>> os.path.isdir("tab.py")
False
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

os.path.split() 分裂上层目录和下层目录|文件

生成一个包含两个元素的元组。

>>> os.path.split("/opt/workspace/tab.py")
('/opt/workspace', 'tab.py')                   #tab.py为文件
>>> os.path.split("/opt/workspace/testMkdir")  #testMkdir为目录
('/opt/workspace', 'testMkdir')
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

os.path.dirname(path) 返回path的目录

就是os.path.split(path)的第一个元素

>>> os.path.dirname("/opt/workspace/tab.py")     # 本质 == os.path.split("/opt/workspace/tab.py")[0]
'/opt/workspace'
  • 1
  • 2
  • 1
  • 2

os.path.basename(path) 返回path最后的文件|目录名

即os.path.split(path)的第二个元素。 
注意:如何路径以’/’或’\’结尾,就会返回空值。

>>> os.path.basename("/opt/workspace/tab.py")  #本质 == os.path.split("/opt/workspace/tab.py")[1]
'tab.py'
>>> os.path.basename("/opt/workspace/testMkdir")
'testMkdir'
>>> os.path.basename("/opt/workspace/")
''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

os.path.join() 合并目录名和文件名|目录名

>>> os.path.basename("/opt/workspace/tab.py")
'tab.py'
>>> os.path.dirname("/opt/workspace/tab.py")
'/opt/workspace'
>>> os.path.join(os.path.dirname("/opt/workspae/tab.py"),os.path.basename("/opt/workspace/tab.py"))
'/opt/workspae/tab.py'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

os.path.splitext() 分离文件名和扩展名

>>> os.path.splitext("tab.py")
('tab', '.py')
  • 1
  • 2
  • 1
  • 2

os.path.abspath() 获得绝对路径

返回一个文件或目录的绝对路径,可以很方便的得到一个文件或目录的绝对路径。

>>> os.path.abspath("tab.py")
'/opt/workspace/tab.py'
  • 1
  • 2
  • 1
  • 2

文件或目录信息的查询、创建、删除、修改

os.path.getsize() 获得文件或目录的大小

>>> os.path.getsize("tab.py")
417
>>> os.path.getsize("testMkdir")
6
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

os.stat() 获取文件/目录信息

>>> os.stat("/opt")
posix.stat_result(st_mode=16877, st_ino=164, st_dev=64768L, st_nlink=4, st_uid=0, st_gid=0, st_size=31, st_atime=1460805310, st_mtime=1460805067, st_ctime=1460805067)
>>> os.stat("/opt/workspace/tab.py")
posix.stat_result(st_mode=33152, st_ino=203490123, st_dev=64768L, st_nlink=1, st_uid=0, st_gid=0, st_size=417, st_atime=1460805594, st_mtime=1460805500, st_ctime=1460805500)
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

os.listdir() 获取指定目录下的文件和目录名列表

listdir(…) 
listdir(path) -> list_of_strings 
Return a list containing the names of the entries in the directory. 
path: path of directory to list 
The list is in arbitrary order. 
NOTE:It does not include the special 
entries ‘.’ and ‘..’ even if they are present in the directory. 
注意:路径并不能含有’.’ or ‘..’ 。

>>> dirName = "/opt/workspace"
>>> os.listdir(dirName)
['ifTest.py', 'forTest.py', 'forTest1.py', 'whileTest.py', 'continueTest.py', 'pyModule.py', 'randomTest.py', 'funcTest1.py', '.servStatus.py.swp', 'forTest2.py', 'ifTest1.py', 'pyModule.pyc', 'tab.py', 'tab.pyc', 'choiceTest.py', 'funTest2.py', 'funcTest3.py']
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

os.walk() 生成一个目录树下的所有文件名

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) 
1.top表示要遍历的目录树的路径 
2.topdown的默认值是”True”,表示首先返回目录树下的文件,然后在遍历目录树的子目录.Topdown的值为”False”时,则表示先遍历目录树的子目录,返回子目录下的文件,最后返回根目录下的文件 
3.onerror的默认值是”None”,表示忽略文件遍历时产生的错误。如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历

for root, dirs, files in os.walk("/opt", topdown=False):
    for name in files:
        print(os.path.join(root, name)) #打印文件绝对路径
    for name in dirs:
        print(os.path.join(root, name)) #打印目录绝对路径
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

os.path.walk(top,func,arg) 生成一个目录树下的所有文件名

1.top表示需要遍历的目录树的路径 
2.func表示回调函数,对遍历路径进行处理.所谓回调函数,是作为某个函数的参数使用,当某个时间触发时,程序将调用定义好的回调函数处理某个任务.回调函数必须提供3个参数:第1个参数为walk()的参数tag,第2个参数表示目录列表,第3个参数表示文件列表 
3.arg是传递给回调参数func的元组.回调函数的一个参数必须是arg,为回调函数提供处理参数.参数arg可以为空

def visitDir(arg,dirname,names):
    for filespath in names:
        print os.path.join(dirname,filespath)
path="/opt"
os.path.walk(path,VisitDir,())        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

注意:os.path.walk()与os.walk()产生的文件名列表并不相同。os.path.walk()产生目录树下的目录路径和文件路径,而os.walk()只产生文件路径

os.mkdir() 创建一个目录

>>> os.mkdir("testMkdir")
>>> os.listdir(os.getcwd())
['tab.py', 'ipython-4.1.2.tar.gz', 'ipython-4.1.2', 'traitlets-4.1.0', 'ipython_genutils-0.1.0', 'pexpect-4.0.1', 'ptyprocess-0.5', 'pickleshare-0.5', 'path.py-8.1.1', 'testMkdir']
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

os.makedirs(‘dirname1/dirname2’) 递归创建多层目录

>>> os.makedirs("/opt/workspace/dirname1/dirname2")
>>> os.listdir("/opt/workspace")
['tab.py', 'ipython-4.1.2.tar.gz', 'ipython-4.1.2', 'traitlets-4.1.0', 'ipython_genutils-0.1.0', 'pexpect-4.0.1', 'ptyprocess-0.5', 'pickleshare-0.5', 'path.py-8.1.1', 'testMkdir', 'dirname1']
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

os.rmdir() 删除指定的目录

>>> os.rmdir("testDir")
  • 1
  • 1

os.removedirs(‘dirname1’) 递归删除目录

若dirname2为空,则删除,并递归到上一级dirname1目录,如若也为空,则也删除,依此类推。

>>> os.removedirs("/opt/workspace/dirname1/dirname2")
  • 1
  • 1

os.remove() 删除一个文件

注意:只能够删除文件,而不能删除一个目录。

>>> os.remove('ifTest.py')
  • 1
  • 1

os.rename() 重命名一个文件或目录

>>> os.rename("test","JustTest")       #test为一个文件
>>> os.rename("ipython-4.1.2","sdasd")  #ipython-4.1.2为一个目录
  • 1
  • 2
  • 1
  • 2

os.chdir() 改变当前脚本工作目录

>>> os.getcwd()
'/opt/workspace'
>>> os.chdir("/")
>>> os.getcwd()
'/'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

执行系统指令的方法

os.system() 执行Shell指令

可以执行不同平台下的Shell指令,显示执行结果并返回执行状态。若为Windows,则为CMD;若是Linux,则为Bash。 
注意:返回的是执行状态,执行结果只会显示在终端上。 
os.system(…) 
os.system(command) -> exit_status 
Execute the command (a string) in a subshell.

>>> result = os.system("ls")
ipython-4.1.2.tar.gz    path.py-8.1.1    ptyprocess-0.5  testMkdir
ipython_genutils-0.1.0  pexpect-4.0.1    sdasd       traitlets-4.1.0
JustTest        pickleshare-0.5  tab.py
>>> result
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

os.popen() 运行shell命令并生成类文件对象

生成的变量可以赋给变量,再用read()等类文件对象内置方法读取和操作。

>>> result = os.popen("ls")
>>> result.read()
'ipython-4.1.2.tar.gz\nipython_genutils-0.1.0\nJustTest\npath.py-8.1.1\npexpect-4.0.1\npickleshare-0.5\nptyprocess-0.5\nsdasd\ntab.py\ntestMkdir\ntraitlets-4.1.0\n'
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

修改时间属性的方法

os.utime() 修改时间属性

>>> stinfo = os.stat("/opt/workspace/tab.py")
>>> stinfo.st_atime
1460805594.4710202
>>> stinfo.st_mtime
1460805500.175018
>>>os.utime('/opt/workspace/tab.py',(1375448978,1369735977))
>>> stinfo = os.stat("/opt/workspace/tab.py")
>>> stinfo.st_atime
1375448978.0
>>> stinfo.st_mtime
1369735977.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

修改文件或目录权限的方法

os.access() 查询文件权限模式

一般需要结合os.R_OK/os.W_OK/os.X_OK文件权限模式来处理。

>>> os.access("tab.py",os.W_OK)
True
>>> os.access("tab.py",os.R_OK)
True
>>> os.access("tab.py",os.X_OK)
False
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

os.chmod() 改变文件权限模式

>>> os.chmod("tab.py",os.X_OK)
>>> os.access("tab.py",os.X_OK)
True
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

Other

os.path.commonprefix(list) 返回list中,所有path共有的最长的路径,从左向右,相同字符 
os.path.abspath(path) 返回path规范化的绝对路径 
os.path.isabs(path) 如果path是绝对路径,返回True 
os.path.normcase(path) 在Linux下,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为反斜杠

转载:http://blog.csdn.net/jmilk/article/details/51171131

时间: 2025-01-14 09:05:41

Python OS模块详解的相关文章

Python itertools模块详解

  篇文章主要介绍了Python itertools模块详解,本文基本是基于文档的翻译和补充,相当于翻译了,需要的朋友可以参考下 这货很强大, 必须掌握 文档 链接 http://docs.python.org/2/library/itertools.html pymotw 链接 http://pymotw.com/2/itertools/ 基本是基于文档的翻译和补充,相当于翻译了 itertools用于高效循环的迭代函数集合 组成 总体,整体了解 无限迭代器 代码如下: 迭代器 参数 结果 例

Python ZipFile模块详解_python

Python zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了.ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的.比如要读取一个Python zipfile 模块,这里假设filename是一个文件的路径: 复制代码 代码如下: import zipfile  z =zipfile.ZipFi

Python Queue模块详解_python

Python中,队列是线程间最常用的交换数据的形式.Queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 创建一个"队列"对象 import Queue q = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限.可通过Queue的构造函数的可选参数maxsize来设定队列长度.如果maxsize小于1就表示队列长度无限. 将一个值放入队列中 q.put(10) 调用队列对象的p

Python Queue模块详解

来源:http://www.jb51.net/article/58004.htm Python中,队列是线程间最常用的交换数据的形式.Queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 创建一个"队列"对象 import Queue q = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限.可通过Queue的构造函数的可选参数maxsize来设定队列长度.如果maxsize小

Python logging模块详解

来源:http://blog.csdn.net/zyz511919766/article/details/25136485 来源:http://blog.csdn.net/yatere/article/details/6655445 来源:http://www.jb51.net/article/88449.htm 简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') loggi

Python time模块详解(常用函数实例讲解,非常好)_python

在开始之前,首先要说明这几点: 1.在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同.2.UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST(Daylight Saving Time)即夏令时.3.时间戳(timestamp)的方式:通常来说,时间戳表示的是从1

python自带的http模块详解_python

挺久没写博客了,因为博主开始了今年另一段美好的实习经历,学习加做项目,时间已排满:很感谢今年这两段经历,让我接触了golang和python,学习不同语言,可以跳出之前学习c/c++思维的限制,学习golang和python的优秀特性以及了解在不同的场景,适用不同的语言:而之前学习linux和c/c++,也使我很快就上手golang和python; 我学习的习惯,除了学习如何使用,还喜欢研究源码,学习运行机制,这样用起来才会得心应手或者说,使用这些语言或框架,就和平时吃饭睡觉一样,非常自然:因为

Python中操作mysql的pymysql模块详解_python

前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.7.11.mysql版本:5.6.24 一.安装 pip3 install pymysql 二.使用操作 1.执行SQL #!/usr/bin/env pytho # -*- coding:utf-8 -*- import pymysql # 创建连接 conn = pymysql.connect(host=

发布你的Python模块详解_python

我们在学习Python的时候,除了用pip安装一些模块之外,有时候会从网站下载安装包下来安装,我也想要把我自己编写的模块做成这样的安装包,该怎么办,如何发布呢? 大概需要以下四个步骤: 1.首先为模块创建一个文件夹. 举个简单的栗子,你写了一个add.py模块文件,里面有个add方法实现加法.这第一步就需要你创建一个文件夹.并把add.py复制到这个文件夹里,为简单起见,我们把文件夹就命名为add add |__add.py 2.然后在新文件夹中创建一个名为"setup.py"的文件.