sys和os模块python
http://www.runoob.com/python3/python3-os-file-methods.html缓存
Python中 sys.argv[]的用法简明解释学习
由于是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果,也在网上查了许多,但发现这个问题的比较详细的解释只有一个版本,大部分都是转裁和复制的。给的都是简明python教程上那个一长串代码的例子,说看了就明白了,可我看得晕头转向的仍是没真正明白,只知道“sys.argv[0]表示代码自己文件路径”这点,其实仍是不明其意。后来通过大量努力,多方求教才真正明悟了,谨以记录和分享,但愿能从另外一个角度给同在求索过程当中的同窗一点启发。编码
sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,因此那些试图从代码来讲明它做用的解释一直没看明白。由于咱们从外部取得的参数能够是多个,因此得到的是一个列表(list),也就是说sys.argv其实能够看做是一个列表,因此才能用[]提取其中的元素。其第一个元素是程序自己,随后才依次是外部给予的参数。spa
下面咱们经过一个极简单的test.py程序的运行结果来讲明它的用法。.net
1 #test.py 2 3 import sys 4 a=sys.argv[0] 5 print(a)
将test.py保存在c盘的根目录下。设计
在程序中找到 ‘运行’->点击->输入"cmd"->回车键 进入控制台命令窗口(以下图),先输入cd c:\ (做用是将命令路径改到c盘根目录),而后输入test.py运行咱们刚刚写的程序:code
获得的结果是C:\test.py,这就是0指代码(即此.py程序)自己的意思。
而后咱们将代码中0改成1 :
a=sys.argv[1]
保存后,再从控制台窗口运行,此次咱们加上一个参数,输入:test.py what
获得的结果就是咱们输入的参数what,看到这里你是否是开始明白了呢。
那咱们再把代码修改一下:
a=sys.argv[2:]
保存后,再从控制台窗台运行程序,此次多加几个参数,以空格隔开:
test.py a b c d e f
获得的结果为[‘b’, ’c’, ’d’, ’e’, ’f’]
应该大彻大悟了吧。Sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码自己的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。
watchdog模块,对文件建立删除等操做进行监控
stringIO和bytesIO
上下文管理器https://blog.csdn.net/hbnn111/article/details/78029011
http://python.jobbole.com/82289/
https://www.cnblogs.com/vamei/archive/2012/11/23/2772445.html
hmac和hashlib
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0015108777177966ef0f4f8510a41b3b8c48cdcf7047b2d000
StringIO常常被用来做为字符串的缓存,应为StringIO有个好处,他的有些接口和文件操做是一致的,也就是说用一样的代码,能够同时当成文件操做或者StringIO操做。
Python学习笔记之optparse模块OptionParser
optparse,是一个更够让程序设计人员轻松设计出简单明了、易于使用、符合标准的Unix命令例程式的Python模块。生成使用和帮助信息
import StringIO s = StringIO.StringIO() s.write('www.baidu.com\r\n') s.write('news.realsil.com.cn') s.seek(0) print '*' * 20 print s.tell() print s.read() print '*' * 20 print s.tell() print s.read() print '*' * 20 print s.tell() print s.getvalue() print '*' * 20 print s.tell() s.seek(-4,2) print s.read()
运行结果:
********************
0
www.baidu.com
news.realsil.com.cn
********************
34
********************
34
www.baidu.com
news.realsil.com.cn
********************
34
m.cn
----------------------
s.read([n])
参数n限定读取长度,int类型;缺省状态为从当前读写位置读取对象s中存储的全部数据。读取结束后,读写位置被移动。
----------------------
s.readline([length])
参数length限定读取的结束位置,int类型,缺省状态为None:从当前读写位置读取至下一个以“\n”为结束符的当前行。读写位置被移动。
----------------------
s.readlines([sizehint])
参数sizehint为int类型,缺省状态为读取全部行并做为列表返回,除此以外从当前读写位置读取至下一个以“\n”为结束符的当前行。读写位置被移动。
----------------------
s.write(s)
从读写位置将参数s写入给对象s。参数s为str或unicode类型。读写位置被移动。
----------------------
s.writelines(list)
从读写位置将list写入给对象s。参数list为一个列表,列表的成员为str或unicode类型。读写位置被移动。
----------------------
s.getvalue()
此函数没有参数,返回对象s中的全部数据。
----------------------
s.truncate([size])
从读写位置起切断数据,参数size限定裁剪长度,缺省值为None。
----------------------
s.tell()
返回当前读写位置。
----------------------
s.seek(pos[,mode])
移动当前读写位置至pos处,可选参数mode为0时将读写位置移动至pos处,为1时将读写位置从当前位置起向后移动pos个长度,为2时将读写位置置于末尾处再向后移动pos个长度;默认为0。
----------------------
s.close()
释放缓冲区,执行此函数后,数据将被释放,也不可再进行操做。
----------------------
s.isatty()
此函数老是返回0。不论StringIO对象是否已被close()。
----------------------
s.flush()
刷新内部缓冲区。
----------------------
StringIO操做的只能是str,若是要操做二进制数据,就须要使用BytesIO。
BytesIO实现了在内存中读写bytes,咱们建立一个BytesIO,而后写入一些bytes:
>>> from io import BytesIO >>> f = BytesIO() >>> f.write('中文'.encode('utf-8')) 6 >>> print(f.getvalue()) b'\xe4\xb8\xad\xe6\x96\x87'
请注意,写入的不是str,而是通过UTF-8编码的bytes。
和StringIO相似,能够用一个bytes初始化BytesIO,而后,像读文件同样读取:
>>> from io import BytesIO >>> f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87') >>> f.read() b'\xe4\xb8\xad\xe6\x96\x87'