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)