世界上有些悲剧没有解,是个死结。
import sys
import os
reload(sys)
sys.setdefaultencoding('utf-8')

主要功能

os模块主要有以下4点功能:

  1. 系统相关
  2. 目录及文件操作
  3. 执行命令
  4. 管理进程

操作相关系统

查看当前操作系统名称(win–>nt,linux–>posix)

print os.name

查看系统环境变量

print os.environ

目录以及文件操作

打印目录下所有文件,当前目录的话加上点,或者使用别的路径

print os.listdir('.')

出现乱码的话,使用编码再解码一下即可

for x in os.listdir('.'):print x.decode('gbk').encode('utf-8')

打印当前路径

print os.getcwd()

更换路径,演示切换到D盘

print os.chdir('D:\\')

创建文件夹

创建单个文件夹

os.mkdir('dir')

在文件夹中创新的文件夹

os.makedirs('dir1/dir2')

递归删除空的文件夹,如果有文件就不删除

os.removedirs('dir1\dir2')

删除文件

os.remove('1.py')

重命名文件夹或者文件

os.rename('2.txt','2-1.txt')

判断文件或者文件夹是否存在

os.path.exists('2.txt')

判断路径是不是目录或者文件

os.path.isfile('2.txt')
os.path.isdir('/aa/aa/aaa/a')

路径与文件名组合

print os.path.join('D:\\','dir1')

执行命令

os.system('ping www.baidu.com')
# 并不会打印出cmd窗口下返回的数据信息
os.popen('ipconfig')
ret=os.popen('ipconfig')
print ret.read().decode('gbk').encode('utf-8')

现在基本上不适用上面的两个方法,基本都在用subprocess。

高级用法

常规列出目录下的所有文件并统计文件数

import os,sys
def listdir(dir,file):
    file.write(dir + '\n')
    fielnum = 0
    list = os.listdir(dir)
    #列出目录下的所有文件和目录
    for line in list:
        filepath = os.path.join(dir,line)
        if os.path.isdir(filepath):
            #如果filepath是目录,则再列出该目录下的所有文件
            myfile.write('   ' + line + '\\'+'\n')
            for li in os.listdir(filepath):
                myfile.write('     '+li + '\n')
                fielnum = fielnum + 1
        elif os.path:
            #如果filepath是文件,直接列出文件名
            myfile.write('   '+line + '\n')
            fielnum = fielnum + 1
    myfile.write('all the file num is '+ str(fielnum))
dir = raw_input('please input the path:')
myfile = open('list.txt','w')

使用os.walk把给定的目录下的所有目录和文件遍历出来。

方法:os.walk(path),遍历path,返回一个对象,他的每个部分都是一个三元组,(‘目录x’,[目录x下的目录list],目录x下面的文件)

import os
def walk_dir(dir,fileinfo,topdown=True):
    for root, dirs, files in os.walk(dir, topdown):
        for name in files:
            print(os.path.join(name))
            fileinfo.write(os.path.join(root,name) + '\n')
        for name in dirs:
            print(os.path.join(name))
            fileinfo.write('  ' + os.path.join(root,name) + '\n')
dir = raw_input('please input the path:')
fileinfo = open('list.txt','w')
walk_dir(dir,fileinfo)

筛选文件,统计子目录的大小

import os
from os.path import getsize,join
for root,dirs,files in os.walk(r'D:\\python3'):
    print root
    print sum(getsize(join(root,name))for name in files)
    # 因为getsize的时候,传入的name是相对的并不是完整的路径,使用join加在一起
    if 'txt' in dirs:
        # 如果存在txt目录,就删除该目录
        dirs.remove('txt')

附加 shutil 库

shutil库是一个功能更加完整全面的系统层文件目录管理库,能够对文件详细的各种操作,获取任务管理器中的参数等等。

常见用法:

shutil.copyfile( src, dst)    从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉
shutil.move( src, dst)        移动文件或重命名
shutil.copymode( src, dst)    只是会复制其权限其他的东西是不会被复制的
shutil.copystat( src, dst)    复制权限、最后访问时间、最后修改时间
shutil.copy( src, dst)        复制一个文件到一个文件或一个目录
shutil.copy2( src, dst)        在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
shutil.copy2( src, dst)        如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
shutil.copytree( olddir, newdir, True/Flase)
把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接
shutil.rmtree( src )    递归删除一个目录以及目录内的所有内容

附加 psutil 库

psutil可以用来做系统监控,性能分析,进程管理。 支持的系统有Linux, Windows, OSX, FreeBSD and Sun Solaris,32和64位系统都支持,同时支持pyhton2.4到3.4

监控当前进程是否有chrome.exe在运行:

def check(name):
    while 1:
        list_ = []
        for pnum in psutil.pids():
            p = psutil.Process(pnum).name()
            list_.append(p)
        if name in list_:
            print('{} : 正在运行...'.format(name))
            time.sleep(1800)
            # 每半个小时检测一次
        else:
            print('{} : 停止运行....'.format(name))
            return 'OVER'

check('chrome.exe')

获取其他相关信息转载地址

import psutil
import datetime
import time

# 当前时间
now_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
print now_time
# 查看cpu的信息
print u"物理CPU个数: %s" % psutil.cpu_count(logical=False)
cpu = (str)(psutil.cpu_percent(1)) + '%'
print u"cup使用率: %s" % cpu
# 查看内存信息,剩余内存.free  总共.total
free = str(round(psutil.virtual_memory().free/(1024.0*1024.0*1024.0), 2))
total = str(round(psutil.virtual_memory().total/(1024.0*1024.0*1024.0), 2))
memory = int(psutil.virtual_memory().total-psutil.virtual_memory().free)/float(psutil.virtual_memory().total)
print u"物理内存: %s G" % total
print u"剩余物理内存: %s G" % free
print u"物理内存使用率: %s %%" % int(memory*100)
# 系统启动时间
print u"系统启动时间: %s" % datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
# 系统用户
users_count = len(psutil.users())
users_list = ",".join([u.name for u in psutil.users()])
print u"当前有%s个用户,分别是 %s" % (users_count, users_list)
# 网卡,可以得到网卡属性,连接数,当前流量等信息
net = psutil.net_io_counters()
bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024/1024)
bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024/1024)
print u"网卡接收流量 %s 网卡发送流量 %s" % (bytes_rcvd, bytes_sent)
io = psutil.disk_partitions()
del io[-1]
print '-----------------------------磁盘信息---------------------------------------'
print "系统磁盘信息:"+str(io)
for i in io:
    o = psutil.disk_usage(i.device)
    print "总容量:"+str(int(o.total/(1024.0*1024.0*1024.0)))+"G"
    print "已用容量:"+str(int(o.used/(1024.0*1024.0*1024.0)))+"G"
    print "可用容量:"+str(int(o.free/(1024.0*1024.0*1024.0)))+"G"
print '-----------------------------进程信息-------------------------------------'
# 查看系统全部进程
for pnum in psutil.pids():
    p = psutil.Process(pnum)
    print u"进程名 %-20s  内存利用率 %-18s 进程状态 %-10s 创建时间 %-10s "\