世界上有些悲剧没有解,是个死结。
import sys
import os
reload(sys)
sys.setdefaultencoding('utf-8')
主要功能
os模块主要有以下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 "\