1. getopt
- python中用于解析命令行参数的函数。
通过import getopt导入
调用:options,args=getopt.getopt(argv, shortopts, longopts = [])
返回:options,args - 一般argv是命令行传入的参数。通过sys.argv获得(记得import sys)。一般写的是sys.argv[1:] (因为0是py文件,不用解析)
- shortopts:简写参数列表(也称短格式),为一个字母。其中后面不带冒号的是没有参数的选项,带冒号是有参数的。
longopts:长参数列表,为一个单词。后面有等号的需要参数,没有的不需要。 - opts:分析出的(option, value)列表对。格式:[(option1,value1),(option2,value2)…] 。
args:不属于格式信息的剩余命令行参数列表。
import getopt
import sys
opts,args = getopt.getopt(sys.argv[1:],'-h-f:-v',['help','filename=','version'])
print(opts)
for opt_name,opt_value in opts:
if opt_name in ('-h','--help'):
print("[*] Help info")
sys.exit()
if opt_name in ('-v','--version'):
print("[*] Version is 0.01 ")
sys.exit()
if opt_name in ('-f','--filename'):
fileName = opt_value
print("[*] Filename is ",fileName)
# do something
sys.exit()
2. 深浅拷贝
- =浅拷贝:值相等,地址相等。
- deepcopy深拷贝:值相等,地址不相等。原有被复制对象 和 已经复制出来的新对象 两者改变不互相影响。 (要 import copy)
3. format
- format类似于C中的%,但比C更为强大,用的是{}和:。
- 基本使用:
"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
#'hello world'
"{0} {1}".format("hello", "world") # 设置指定位置
#'hello world'
"{1} {0} {1}".format("hello", "world") # 设置指定位置
#'world hello world'
- 其他用法:
"网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com")
#通过字典的key来填充
names={'name':'Kevin','name2':'Tom'}
print 'hello {names[name]} i am {names[name2]}'.format(names=names)
- 格式转换:b、d、o、x分别是二进制、十进制、八进制、十六进制。
数字 | 格式 | 输出 | 描述 |
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | 3.14 | 带符号保留小数点后两位 |
-1 | {:+.2f} | -1 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00E+09 | 指数记法 |
25 | {0:b} | 11001 | 转换成二进制 |
25 | {0:d} | 25 | 转换成十进制 |
25 | {0:o} | 31 | 转换成八进制 |
25 | {0:x} | 19 | 转换成十六进制 |
- 对齐填充
数字 | 格式 | 输出 | 描述 |
5 | {:0>2} | 05 | 数字补零 (填充左边, 宽度为2) |
5 | {:x<4} | 5xxx | 数字补x (填充右边, 宽度为4) |
10 | {:x^4} | x10x | 数字补x (填充右边, 宽度为4) |
13 | {:10} | 13 | 右对齐 (默认, 宽度为10) |
13 | {:<10} | 13 | 左对齐 (宽度为10) |
13 | {:^10} | 13 | 中间对齐 (宽度为10) |
4. update
- Python 的字典通过 update() 函数把字典dict2的键/值对更新到dict里:即字典中没有该键,会插入一个新的;如果有的话就会更新现有的。
5. strptime和strftime
- strftime可以用来获取当前时间,将时间格式化为字符串等等。需要注意的是获得的时间是服务器时间,要注意时区问题。
#我们可以使用strftime()函数将时间格式化为我们想要的格式
import time
t = (2009, 2, 17, 17, 3, 38, 1, 48, 0)
t = time.mktime(t)
print (time.strftime("%b %d %Y %H:%M:%S", time.gmtime(t)))
- Python time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。
- python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
import time
struct_time = time.strptime("30 Nov 00", "%d %b %y")
print "returned tuple: %s " % struct_time
- 字符串转datetime
dt = datetime.datetime.strptime('2017-04-19 00:42:44','%Y-%m-%d %H:%M:%S') - datetime转字符串
str = dt.strftime("%Y-%m-%d-%H")
6. urllib下的request使用
- urllib.request库是 Python3 自带的用于网页抓取的模块(不需要下载,导入即可使用),简单例子:
# 向指定的url发送请求,并返回服务器响应的类文件对象
response = urllib.request.urlopen("http://admin.bxcker.com")
# 服务器返回的类文件对象支持Python文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
html = response.read()
- 参考:爬虫之urllib下的request使用
7. datetime和time
- 在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的。通读文档可知,time 模块是围绕着 Unix Timestamp 进行的。
- datetime 比 time 高级了不少,可以理解为 datetime 基于 time 进行了封装,提供了更多实用的函数。在datetime 模块中包含了几个类,具体如下:
timedelta # 主要用于计算时间跨度
tzinfo # 时区相关
time # 只关注时间
date # 只关注日期
datetime # 同时有时间和日期 - datetime的比较:可以直接加减
diff = dt2 - dt1
print(diff.days)
print(diff.seconds)
print(diff.days*86400+diff.seconds) #真正相差秒数
8. 字符串和值之间转换
• eval:该函数用来执行一个字符串表达式,并返回表达式的值。
• 字符串→数值 另外两种方式:
①import string:(只适用于python2,不适用于python3)
tt='555'
ts=string.atoi(tt)
②int转换:
int(tt)• 数值→字符串:
tt=322
tem='%d' %tt
9. Queue
- Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。
- 模块中常见方法:
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.full 与 maxsize 大小对应
Queue.get([block[, timeout]])获取队列,timeout等待时间
Queue.get_nowait() 相当Queue.get(False)
Queue.put(item) 写入队列,timeout等待时间
Queue.put_nowait(item) 相当Queue.put(item, False)
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作
10. threading.Thread
- 例子:
import threading
import time
exitFlag = 0
class myThread (threading.Thread): #继承父类threading.Thread
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self): #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
print "Starting " + self.name
print_time(self.name, self.counter, 5)
print "Exiting " + self.name
def print_time(threadName, delay, counter):
while counter:
if exitFlag:
(threading.Thread).exit()
time.sleep(delay)
print "%s: %s" % (threadName, time.ctime(time.time()))
counter -= 1
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# 开启线程
thread1.start()
thread2.start()
print "Exiting Main Thread"
11. tty
参考:http://www.blog.chinaunix.net/uid-29614976-id-5750663.html
12. isinstance
- 类似于Java中的instanceof运算符,但这个在python中是个函数。python中类似功能的函数还有type,但type不考虑继承关系,isinstance会考虑继承。
- isinstance(object, classinfo)
object -- 实例对象。
classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。 - 基本类型中classinfo有:int,float,bool,complex,str(字符串),list,dict(字典),set,tuple(元组)
13. decode 和 encode
- python中,我们使用decode()和encode()来进行解码和编码
- 在python中,使用unicode类型作为编码的基础类型。即
decode encode
str ---------> unicode --------->str
14. 语法上多行定义一个字符串
- 代码:
import os
#①用三引号
tt='''this
is
a
test.'''
print("1:",tt)
#②用反斜杆
tt="this \
is \
another \
test."
print("2:",tt)
#③用小括号
tt=('this '
'is '
'last '
'test.')
print("3:",tt)
os.system("pause")
- 输出为:
1: this
is
a
test.
2: this is another test.
3: this is last test.
15. unittest的main函数
- unittest.main()会自动组织文件里的测试用例,也可以传入相关参数:
arg = sys.argv
arg.append('-v')
unittest.main(exit=False,argv=arg)