os 模块,正如其名,主要与操做系统打交道的,下面介绍下一些常见的功能
1、文件与目录操做node
一、os.getcwd() 获取当前路径
>>> import os
>>> os.getcwd()
'/tmp/python'python
二、os.listdir() 列出目录中的内容
>>> import os
>>> os.listdir(os.getcwd())
['esc.py', '7.py', 'cat1.py', 'say.pyc', '2.py', 'backup_ver1.py', '5.py', '8.py', 'count.py', '3.py', 'replace.py', 'p_w_picpath']web
注意,经过这个方法只能以列表的形式列出全部文件,但不能遍历该目录下的子目录shell
三、os.mkdir() 建立目录
>>> import os
>>> os.mkdir('/tmp/testdir')
[root@node1 python]# ls /tmp/testdir/ -d
/tmp/testdir/vim
经过os.mkdir 只能建立一级目录,若是父目录不存在,则会报错:windows
>>> import os
>>> os.mkdir('/testdir/dirs')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: '/testdir/dirs'bash
一次性建立嵌套目录可以使用os.makedirs,makedirs能够生成多层递归目录,removedirs能够删除多层递归的空目录,若目录中有文件则没法删除less
>>> import os
>>> os.makedirs('/testdir/dirs')
>>> os.system('ls -ld /testdir/dirs')
drwxr-xr-x. 2 root root 4096 Dec 3 20:52 /testdir/dirs
0ssh
四、os.rmdir() 删除目录
>>> import os
>>> os.rmdir('/testdir/dirs')
>>> os.system('ls -l /testdir/dirs')
ls: cannot access /testdir/dirs: No such file or directory
512ide
目录必须为空,不然会报错
[root@node1 tmp]# mkdir testdir
[root@node1 tmp]# touch testdir/a
>>> import os
>>> os.rmdir('/tmp/testdir')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 39] Directory not empty: '/tmp/testdir'
若是要删除能够借助os.system() 执行shell命令强行删除
>>> import os
>>> os.system('rm -rf /tmp/testdir')
0
>>> os.system('ls -l /tmp/testdir')
ls: cannot access /tmp/testdir: No such file or directory
512
五、os.chdir() 改变目录
>>> import os
>>> os.getcwd()
'/tmp/python'
>>> os.chdir('/etc')
>>> os.getcwd()
'/etc'
六、os.remove() 删除文件
>>> import os
>>> os.remove('/tmp/python/1.py')
七、os.rename(原文件名,改变文件名) 重命名文件或目录
>>> import os
>>> os.rename('/tmp/test.txt','/tmp/python.txt')
>>> os.system('ls -l /tmp/*.txt')
-rw-r--r--. 1 root root 47 Dec 2 06:16 /tmp/myhello.txt
-rw-r--r--. 1 root root 82 Dec 2 06:18 /tmp/python.txt
0
os.renames() 递归的给目录重命名
>>> import os
>>> os.rename('/tmp/test/subdir','/tmp/test1/subdir1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory
>>> os.renames('/tmp/test/subdir','/tmp/test1/subdir1')
>>> os.system('ls -ld /tmp/test1/subdir1')
drwxr-xr-x. 2 root root 4096 Dec 4 20:06 /tmp/test1/subdir1
0
八、os.system() 执行shell 命令
>>> import os
>>> os.system('ls /tmp')
backup myhello.txt python python.txt test yum.log
0
九、os 模块属性
>>> os.curdir #当前工做目录的字符串名称
'.'
>>> os.pardir #(当前工做目录的)父目录字符串名称
'..'
>>> os.linesep #用于在文件中分隔行的字符串
'\n'
>>> os.sep #用来分隔文件路径名的字符串
'/'
>>> os.pathsep #用于分隔文件路径的字符串
':'
这个属性在写脚本的时候比较有用,好比在写备份脚本的时候,指定存放备份的路径能够这样:
>>> import time
>>> filename = time.strftime('%H%M%S')
>>> target_dir = '/tmp/backup'
>>> dirname = target_dir + time.strftime('%Y%m%d')
>>> target = dirname + os.sep + filename + '.tar.gz'
十、os.stat() 返回文件的属性
>>> import os
>>> os.stat('/tmp/python.txt')
posix.stat_result(st_mode=33188, st_ino=924858, st_dev=64768L, st_nlink=1, st_uid=0, st_gid=0,
st_size=82, st_atime=1385936299, st_mtime=1385936293, st_ctime=1386076480)
能够经过字典遍历
#!/usr/bin/python
import os
import stat
import time
fileStats = os.stat('/tmp/python.txt')
fileInfo = {
'Size':fileStats[stat.ST_SIZE],
'LastModified':time.ctime(fileStats[stat.ST_MTIME]),
'LastAccessed':time.ctime(fileStats[stat.ST_ATIME]),
'CreationTime':time.ctime(fileStats[stat.ST_CTIME]),
'Mode':fileStats[stat.ST_MODE]
}
for infoField,infoValue in fileInfo.iteritems():
print infoField, ':' ,infoValue
[root@node1 python]# python stat.py
LastModified : Mon Dec 2 06:18:13 2013
Mode : 33188
CreationTime : Tue Dec 3 21:14:40 2013
LastAccessed : Mon Dec 2 06:18:19 2013
Size : 82
十一、os.walk() 遍历目录
函数声明:walk(top,topdown=True,onerror=None)
1>参数top表示须要遍历的目录树的路径
2>参数topdown的默认值是"True",表示首先返回目录树下的文件,而后在遍历目录树的子目录.Topdown的值为"False"时,则表示先遍历目录树的子目录,返回子目录下的文件,最后返回根目录下的文件
3>参数onerror的默认值是"None",表示忽略文件遍历时产生的错误.若是不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常停止遍历
4>该函数返回一个元组,该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表
#!/usr/bin/python
import os
def visitDir(path):
for root,dirs,files in os.walk(path):
for filespath in files:
print os.path.join(root,filespath)
if __name__ == "__main__":
path = "/root"
visitDir(path)
[root@node1 python]# python walk.py
/root/.bash_history
/root/install.log.syslog
/root/.bash_profile
/root/.viminfo
/root/anaconda-ks.cfg
/root/.bash_logout
/root/init.sh
/root/.cshrc
/root/.bashrc
/root/.tcshrc
/root/.lesshst
/root/install.log
/root/webproject/manage.py
/root/webproject/webproject/wsgi.pyc
/root/webproject/webproject/wsgi.py
/root/webproject/webproject/settings.pyc
/root/webproject/webproject/settings.py
十二、获取系统信息
>>> import os
>>> os.uname() #获取当前系统信息
('Linux', 'node1', '2.6.32-279.el6.x86_64', '#1 SMP Wed Jun 13 18:24:36 EDT 2012', 'x86_64')
>>> os.getuid() #获取当前用户ID
0
>>> os.getgid() #获取当前组ID
0
>>> os.getpid() #获取当前进程ID
1239
>>> os.getpgrp() #获取当前进程组ID
1239
>>> os.ctermid() #获取当前使用终端
'/dev/tty'
>>> os.getlogin() #获取当前登陆的用户名
'root'
2、权限
1三、os.access(路径,uid/gid) 测试指定uid/gid 对指定目录有没有权限,有权限返回True,无权限返回False
>>> import os
>>> os.access('/tmp/test')
>>> os.access('/tmp/test',0)
True
>>> os.access('/tmp/test',33)
False
1四、os.chmod(路径,权限) 修改文件/目录 权限
>>> import os
>>> os.chmod ('/tmp/python.txt',0775)
>>> os.system('ls -l /tmp/python.txt')
-rwxrwxr-x. 1 root root 82 Dec 2 06:18 /tmp/python.txt
0
1五、os.chown(路径,UID,GID) 修改拥有者,属组
>>> import os
>>> os.chown('/tmp/python.txt',500,500)
>>> os.system('ls -l /tmp/python.txt')
-rwxrwxr-x. 1 python python 82 Dec 2 06:18 /tmp/python.txt
0
3、os.path 模块
1六、os.path.basename() 去掉目录路径, 返回文件名
>>> import os.path
>>> os.path.basename('/tmp/python.txt')
'python.txt'
1七、os.path.dirname() 去掉文件名, 返回目录路径
>>> import os.path
>>> os.path.dirname('/tmp/python.txt')
'/tmp'
1八、os.path.join() 将分离的各部分组合成一个路径名
>>> import os.path
>>> dir = '/tmp'
>>> file = 'python.txt'
>>> os.path.join(dir,file)
'/tmp/python.txt'
1九、
os.path.getatime() 返回最近访问时间
os.path.getctime() 返回文件建立时间
os.path.getmtime() 返回最近文件修改时间
>>> import os.path
>>> os.path.getatime('/tmp/python.txt')
1385936299.3662264
>>> os.path.getctime('/tmp/python.txt')
1386107618.3203411
>>> os.path.getmtime('/tmp/python.txt')
1385936293.4863505
但这样看到的时间,是计算当前时间距离1970年1月1日的秒数的,不人性化,能够这样显示
>>> import os.path
>>> import time
>>> time.ctime(os.path.getatime('/tmp/python.txt'))
'Mon Dec 2 06:18:19 2013'
>>> time.ctime(os.path.getctime('/tmp/python.txt'))
'Wed Dec 4 05:53:38 2013'
>>> time.ctime(os.path.getmtime('/tmp/python.txt'))
'Mon Dec 2 06:18:13 2013'
20、os.path.getsize() 返回文件大小(以字节为单位)
>>> import os.path
>>> os.path.getsize('/tmp/python.txt')
82
2一、os.path.exists() 指定路径(文件或目录)是否存在
>>> import os.path
>>> os.path.exists('/tmp/python.txt')
True
>>> os.path.exists('/tmp/python')
False
2二、
os.path.isdir() 指定路径是否存在且为一个目录
os.path.isfile() 指定路径是否存在且为一个文件
>>> import os.path
>>> os.path.isdir('/tmp/python.txt')
False
>>> os.path.isdir('/tmp/')
True
>>> os.path.isfile('/tmp')
False
>>> os.path.isfile('/tmp/python.txt')
True
os.path.exists() 判断指定路径是否存在
>>> import os.path
>>> os.path.exists('/tmp/')
True
>>> os.path.exists('/tmpp/')
False
2三、os.path.splitext() 分隔文件名和后缀名
>>> import os.path
>>> os.path.splitext('python.txt')
('python', '.txt')
========================
其余 os 模块函数
文件处理
mkfifo()/mknod() 建立命名管道/建立文件系统节点
remove()/unlink() 删除文件 os.remove()函数用来删除一个文件。
symlink() 建立符号连接
utime() 更新时间戳
tmpfile() 建立并打开('w+b')一个新的临时文件
目录/文件夹
chroot() 改变当前进程的根目录
getcwdu() 返回当前工做目录并返回一个 Unicode 对象 os.getcwd()函数获得当前工做目录,即当前Python脚本工做的目录路径。
makedirs() 建立目录/建立多层目录
removedirs() 删除多层目录
文件描述符操做
open() 底层的操做系统 open (对于文件, 使用标准的内建 open() 函数)
read()/write() 根据文件描述符读取/写入数据
dup()/dup2() 复制文件描述符号/功能相同, 可是是复制到另外一个文件描述符
设备号
makedev() 从 major 和 minor 设备号建立一个原始设备号
major()/minor() 从原始设备号得到 major/minor 设备号
系统操做
os.name 字符串指示你正在使用的平台。好比对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
os.getenv() 获取一个环境变量,若是没有返回none
os.putenv(key, value) 设置一个环境变量值
分隔符
os.sep() 文件夹分隔符,windows中是 / os.extsep() 扩展名分隔符,windows中是 . os.pathsep() 目录分隔符,windows中是 ; os.linesep() 换行分隔符,windows中是 /r/n