1、概览
os模块可以直接调用操作系统提供的接口函数。帮助我们在Python程序中对目录和文件进行操作。
操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中
但是复制文件的函数居然在os模块中不存在,原因是复制文件并非由操作系统提供的系统调用。不过shutil模块提供了copyfile()的函数,你还可以在shutil模块中找到很多实用函数,它们可以看做是os模块的补充。
1、基本功能
>>> import os
>>> os.name # 操作系统类型
'posix'
如果是posix,说明系统是Linux、Unix或Mac OS X,如果是nt,就是Windows系统。
要获取详细的系统信息,可以调用uname()函数
2、环境变量
操作系统中定义的环境变量,全部保存在os.environ这个变量中,可以直接查看
>>> os.environ
要获取某个环境变量的值,可以调用os.environ.get('key')
>>> os.environ.get('PATH')
'/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/mysql/bin'
>>> os.environ.get('x', 'default')
'default'
3、操作目录
# 查看当前目录的绝对路径:
>>> os.path.abspath('.')
'/Users/michael'
# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
# 把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数
# 这样可以正确处理不同操作系统的路径分隔符。
>>> os.path.join('/Users/michael', 'testdir')
'/Users/michael/testdir'
# 然后创建一个目录:
>>> os.mkdir('/Users/michael/testdir')
# 删掉一个目录:
>>> os.rmdir('/Users/michael/testdir')
4、对路径的操作
# 拆分路径,os.path.split()函数
>>> os.path.split('/Users/michael/testdir/file.txt')
('/Users/michael/testdir', 'file.txt') # 后一部分总是最后级别的目录或文件名
# 得到文件扩展名,os.path.splitext()
>>> os.path.splitext('/path/to/file.txt')
('/path/to/file', '.txt')
5、操作文件
# 对文件重命名:
>>> os.rename('test.txt', 'test.py')
# 删掉文件:
>>> os.remove('test.py')
6、利用python的特性过滤文件
# 列出当前目录下的所有目录
>>> [x for x in os.listdir('.') if os.path.isdir(x)] # 遍历所有目录
['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Applications', 'Desktop', ...]
# 列出所有的.py文件
>>> [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
['apis.py', 'config.py', 'models.py', 'pymonitor.py', 'test_db.py', 'urls.py', 'wsgiapp.py']
2、例子
1、利用os模块编写一个能实现dir -l输出的程序。
import os,time
currentdir = os.getcwd() #获取路径
filenum, filesize, dirnum = 0, 0, 0 #初始计量
for name in os.listdir(currentdir):
if os.path.isfile(name): #判断文件是否存在
print('%s\t\t%d\t%s' % (time.strftime('%Y/%m/%d %H:%M', time.localtime(os.path.getmtime(name))), os.path.getsize(name), name)) #打印文件的时间,大小,名字
filenum += 1 #文件数量+1
filesize += os.path.getsize(name) # 文件大小累加
elif os.path.isdir(name): #判断目录是否存在
print('%s\t<DIR>\t\t%s' % (time.strftime('%Y/%m/%d %H:%M', time.localtime(os.path.getmtime(name))), name)) #打印目录的时间,名字
dirnum += 1 #目录数量+1
print('\t\t%d个文件\t\t%d 字节' % (filenum, filesize))
print('\t\t%d个目录' % dirnum)
2、编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径。
import os
def search(dststr, path=['.']): #用相对路径
for n in path:
dirlist = [x for x in os.listdir(n) if os.path.isdir(os.path.join(n, x))] #找出子目录名
filelist = [x for x in os.listdir(n) if os.path.isfile(os.path.join(n, x)) and dststr in os.path.splitext(x)[0]] #找出含关键字的文件名
if len(filelist) > 0:
print(n, ':')
for m in filelist:
print(m)
print('\n')
path = [os.path.join(n, x) for x in dirlist]
search(dststr, path)
return 'Done'
dststr = '2'
search(dststr)
原文地址:http://blog.51cto.com/12758568/2116892