模块sys, os, glob, pickle, subprocess常见用法
参考python常用标准库 http://blog.51cto.com/lizhenliang/1872538
一. sys
1. sys.argv
import sys
print sys.argv[0] #1.py,输出脚本名
print sys.argv[1] #a,输出第一个参数
print sys.argv #['1.py', 'a', 'b', 'c'], 输出脚本名和所有参数
print len(sys.argv) #算上脚本名长度为4
2. 标准输入
a.py的标准输出作为b.py的标准输入
3. 实时动态输出信息,每隔一秒输出数字
二. os模块
1. os.makedirs:在当前路径递归创建文件夹,例如当前目录为/home/axinfu
2. 目录树生成器os.walk(path)
os.walk 的返回值是一个生成器(generator),也就是说我们需要不断的遍历它,来获得所有的内容。
每次遍历的对象都是返回的是一个三元组(root,dirs,files)
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
- files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
>>> for path, dir, file in os.walk('/home/suyu/test'):
... print(path)
... print(dir)
... print(file)
...
/home/suyu/test
['dir1', 'dir2']
['1.py', '2.py', '3.py']
/home/suyu/test/dir1
[]
['dir1_2.py', 'dir1_1.py']
/home/suyu/test/dir2
[]
['dir2_2.py', 'dir2_1.py']
3. os.path分解目录
>>> fname='/home/suyu/test/1.py' #方法1
>>> basename=os.path.basename(fname)
>>> basename
'1.py'
>>> dirname=os.path.dirname(fname)
>>> dirname
'/home/suyu/test' #方法2
>>> dirname, basename = os.path.split(fname)
>>> dirname
'/home/suyu/test'
>>> basename
'1.py'
3.2,拆分扩展名和文件名,接着用例子1中变量basename
>>> root,extension = os.path.splitext(basename)
>>> root
''
>>> extension
'.py'
3.3 如果想得到不到点号的扩展名,os.path.splitext(basename)[1][1:]即可
>>> x=os.path.splitext(basename)
>>> x
('', '.py') #元组类型
>>> x[]
'.py' #字符串类型
>>> x[][]
'.'
>>> x[][:] #字符串切片
'py'
3.4 改变文件扩展名
>>> x=os.path.splitext(fname)
>>> x
('/home/suyu/test/1', '.py')
>>> x[] + '.sh'
'/home/suyu/test/1.sh'
三. glob模块,文件查找,支持通配符(*、?、[])
# 查找目录中所有以.sh为后缀的文件
>>> glob.glob('/home/user/*.sh')
['/home/user/1.sh', '/home/user/b.sh', '/home/user/a.sh', '/home/user/sum.sh'] # 查找目录中出现单个字符并以.sh为后缀的文件
>>> glob.glob('/home/user/?.sh')
['/home/user/1.sh', '/home/user/b.sh', '/home/user/a.sh'] # 查找目录中出现a.sh或b.sh的文件
>>> glob.glob('/home/user/[a|b].sh')
['/home/user/b.sh', '/home/user/a.sh']
四、pickle, 将不同数据类型直接写入文件,可用于数据加密
>>> import pickle
>>> dict = {'a':1, 'b':2, 'c':3}
>>> output = open('data.pkl', 'wb') # 二进制模式打开文件
>>> pickle.dump(dict, output) # 执行完导入操作,当前目录会生成data.pkl文件
>>> output.close() # 写入数据并关闭 读取序列化文件:
>>> f = open('data.pkl')
>>> data = pickle.load(f)
>>> print data
{'a': 1, 'c': 3, 'b': 2}
例子2,在python2和python3中对比写入列表
python2中
import pickle
D=[1,2,3,4]
pickle.dump(D,file('Data.pkl','w'))
pickle.load(file('Data.pkl')
python3中
import pickle
D=[1,2,3,4]
pickle.dump(D,open('Data.pkl','wb'))
pickle.load(open('Data.pkl','rb'))
python3改写一下格式,和例子1中的python2对比,区别只有读取文件时,多了个'rb' 参数
import pickle
D=[1,2,3,4] # 写入文件
output = open('data.pkl', 'wb')
pickle.dump(D,output)
output.close() #读取文件
with open('x.pkl', 'rb') as f:
data=pickle.load(f)
print(data)
五、subprocess,用于执行shell命令
>>> import subprocess
>>> retcode = subprocess.call(["ls", "-l"])
total 2
1.txt
2.txt
>>> retcode #正确执行就返回0
0 #命令错误的话就返回非0
>>> retcode = subprocess.call(["ls", "a"])
ls: cannot access a: No such file or directory
>>> retcode #执行失败就返回非0
2 #如果加上参数shell=True,命令可以用字符串的形式写
>>> subprocess.call('ls -l', shell=True)
2. subprocess.check_call()
用法和subprocess.call相同,不同的地方就是执行命令错误的时候,可以输出比较详细的异常信息
>>> subprocess.check_call("ls a", shell=True)
#subprocess.check_call():运行命令与参数。如果退出状态码非0,引发CalledProcessError异常,包含状态码。
ls: cannot access a: No such file or directory
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 540, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'ls a' returned non-zero exit status 2
>>> p = subprocess.Popen('dmesg |grep eth0', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
>>> p.communicate()
# 返回结果类型为元组
>>> p.pid #获取子进程PID
57039
>>> p.wait() #等待子进程终止,返回状态码
0
>>> p.returncode #返回子进程状态码
0
>>> p1 = subprocess.Popen('ls', stdout=subprocess.PIPE, shell=True)
>>> p2 = subprocess.Popen('grep py', stdin=p1.stdout, stdout=subprocess.PIPE, shell=True)
>>> p1.stdout.close() # 调用后启动p2,为了获得SIGPIPE,不明白
>>> output = p2.communicate()[0] #这里的[0]貌似是指文件名,不明白
>>> output
b'1.py\n2.py\n3.py\n'
import subprocess
a = subprocess.Popen('mkdir hello', shell=True, cwd='/home/suyu')
cwd指定目录位置
模块sys, os, glob, pickle, subprocess常见用法的更多相关文章
- Python常用模块sys,os,time,random功能与用法,新手备学。
这篇文章主要介绍了Python常用模块sys,os,time,random功能与用法,结合实例形式分析了Python模块sys,os,time,random功能.原理.相关模块函数.使用技巧与操作注意 ...
- day16 常用模块 sys os json pickle
知识点 os:和操作系统相关sys:和解释器相关 json:和操作JSON(一种数据交换格式)相关pickle:序列化 hashlib:加密算法Collections:集合类型 ...
- 常用模块(random,os,json,pickle,shelve)
常用模块(random,os,json,pickle,shelve) random import random print(random.random()) # 0-1之间的小数 print(rand ...
- 第二十天 模块 sys os os下path settings random shuit
一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version 获取Pythonn解释程 ...
- devi into python 笔记(五)异常 文件操作 sys os glob模块简单实用
异常: Java异常: try catch块处理异常,throw引发异常. Python异常: try except块处理异常,raise引发异常. 异常如果不主动处理,则会交给Python中的缺省处 ...
- 常用模块 time sys os json pickle
# import time # print(time.time()) #秒数 # print('开始下载') # time.sleep(2) # print('下载完成') # print(time. ...
- python---基础知识回顾(四)(模块sys,os,random,hashlib,re,序列化json和pickle,xml,shutil,configparser,logging,datetime和time,其他)
前提:dir,__all__,help,__doc__,__file__ dir:可以用来查看模块中的所有特性(函数,类,变量等) >>> import copy >>& ...
- python 模块二(os,json,pickle)
#################################总结##################### os常用 os.makedirs('baby/安哥拉/特斯拉/黄晓明') os.mkd ...
- 模块 –SYS
模块 –SYS os模块是跟操作系统的交互 sys是跟python解释器的交互 sys.argv 命令行参数List,第一个元素是程序本身路径 返回一个列表 In [218]: sys.argv Ou ...
随机推荐
- git 忽略文件.gitignore
# 此为注释– 将被Git 忽略 *.a # 忽略所有.a 结尾的文件 !lib.a # 但lib.a 除外 /TODO # 仅仅忽略项目根目录下的TODO 文件,不包括subdir/TODO bui ...
- ubuntu 重启显卡报错 nvidia
1.我装玩显卡以后重启报错了 解决了5个小时才解决,先贴个当时报错的图 第一个图是没有加nomodeset 出先的 当你出现第二个图片的时候证明你离成功不远了 从头开始: 1.开机,出现 ubuntu ...
- H5 css学习
p{text-indent:2em;}段前空两格 段落排版--行间距(行高) p{line-height:1.5em;} 段落排版--中文字间距.字母间距 h1{ letter-spaci ...
- Git,GitHub以及GitLab的区别
Git - 版本控制工具 Github - 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等 GitLab - 基于Git的项目管理软件 Git分布式版本控制系统 Git是一款 ...
- ubuntu18 tensorflow faster_rcnn cpu训练自己数据集
(flappbird) luo@luo-ThinkPad-W540:tf-faster-rcnn$ ./experiments/scripts/train_faster_rcnn.sh 0 pasca ...
- Opencv Laplace算子
//通过拉普拉斯-锐化边缘 kernel = (Mat_<float>(3,3)<<1,1,1,1,-8,1,1,1,1);//Laplace算子 filter2D(img2, ...
- 对称二叉树 · symmetric binary tree
[抄题]: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). ...
- Java中的对象要怎样才算相等
一.引用相等性与对象相等性 1. 引用相等性 引用到堆上同一个对象的两个引用是相等的,这就是引用的相等性. 如果想要知道两个引用是否相等,可以使用==来比较变量上的字节组合,如果引用到相同的对象,字节 ...
- ORACLE修改表空间方法
一.使用imp/exp.先导出源库,再创建新库把表空间创建好,然后再导入.(据说这样可以,前提是新的库里面不能有与源库相同名字的表空间.有待验证!) 二.使用脚本进行修改.据目前所了解,正长情况下需要 ...
- 1700 Crossing River
题目链接: http://poj.org/problem?id=1700 1. 当1个人时: 直接过河 t[0]. 2. 当2个人时: 时间为较慢的那个 t[1]. 3. 当3个人时: 时间为 t[0 ...