Python之freshman05

Posted 猪猪侠宝宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之freshman05相关的知识,希望对你有一定的参考价值。

一:内建模块

  1. time和datetime(http://www.jb51.net/article/49326.htm)

在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。

UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。

时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。

元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元组中的几个元素:

 

 1 #_*_coding:utf-8_*_
 2 import time
 3  
 4  
 5 # print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了time.process_time()测量处理器运算时间,不包括sleep时间,不稳定,mac上测不出来
 6 # print(time.altzone)  #返回与utc时间的时间差,以秒计算\\
 7 # print(time.asctime()) #返回时间格式"Fri Aug 19 11:14:16 2016",
 8 # print(time.localtime()) #返回本地时间 的struct time对象格式
 9 # print(time.gmtime(time.time()-800000)) #返回utc时间的struc时间对象格式
10  
11 # print(time.asctime(time.localtime())) #返回时间格式"Fri Aug 19 11:14:16 2016",
12 #print(time.ctime()) #返回Fri Aug 19 12:38:29 2016 格式, 同上
13  
14  
15  
16 # 日期字符串 转成  时间戳
17 # string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #将 日期字符串 转成 struct时间对象格式
18 # print(string_2_struct)
19 # #
20 # struct_2_stamp = time.mktime(string_2_struct) #将struct时间对象转成时间戳
21 # print(struct_2_stamp)
22  
23  
24  
25 #将时间戳转为字符串格式
26 # print(time.gmtime(time.time()-86640)) #将utc时间戳转换成struct_time格式
27 # print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将utc struct_time格式转成指定的字符串格式
28  
29 #时间加减
30 import datetime
31  
32 # print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
33 #print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
34 # print(datetime.datetime.now() )
35 # print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
36 # print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
37 # print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
38 # print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
39  
40  
41 #
42 # c_time  = datetime.datetime.now()
43 # print(c_time.replace(minute=3,hour=2)) #时间替换
格式参照:
1
%a 本地(locale)简化星期名称 2 %A 本地完整星期名称 3 %b 本地简化月份名称 4 %B 本地完整月份名称 5 %c 本地相应的日期和时间表示 6 %d 一个月中的第几天(01 - 31 7 %H 一天中的第几个小时(24小时制,00 - 23 8 %I 第几个小时(12小时制,01 - 12 9 %j 一年中的第几天(001 - 36610 %m 月份(01 - 1211 %M 分钟数(00 - 5912 %p 本地am或者pm的相应符 一 13 %S 秒(01 - 61) 二 14 %U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。 三 15 %w 一个星期中的第几天(0 - 6,0是星期天) 三 16 %W 和%U基本相同,不同的是%W以星期一为一个星期的开始。 17 %x 本地相应日期 18 %X 本地相应时间 19 %y 去掉世纪的年份(00 - 9920 %Y 完整的年份 21 %Z 时区的名字(如果不存在为空字符) 22 %% ‘%’字符

2.random模块

 1 #!/usr/bin/env python
 2 #_*_encoding: utf-8_*_
 3 import random
 4 print (random.random())  #0.6445010863311293  
 5 #random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0
 6 print (random.randint(1,7)) #4
 7 #random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。
 8 # 其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b
 9 print (random.randrange(1,10)) #5
10 #random.randrange的函数原型为:random.randrange([start], stop[, step]),
11 # 从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),
12 # 结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数。
13 # random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。
14 print(random.choice(\'liukuni\')) #i
15 #random.choice从序列中获取一个随机元素。
16 # 其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。
17 # 这里要说明一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。
18 # list, tuple, 字符串都属于sequence。有关sequence可以查看python手册数据模型这一章。
19 # 下面是使用choice的一些例子:
20 print(random.choice("学习Python"))#
21 print(random.choice(["JGood","is","a","handsome","boy"]))  #List
22 print(random.choice(("Tuple","List","Dict")))   #List
23 print(random.sample([1,2,3,4,5],3))    #[1, 2, 5]
24 #random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列

实际应用:

 1 #!/usr/bin/env python
 2 # encoding: utf-8
 3 import random
 4 import string
 5 #随机整数:
 6 print( random.randint(0,99))  #70
 7  
 8 #随机选取0到100间的偶数:
 9 print(random.randrange(0, 101, 2)) #4
10  
11 #随机浮点数:
12 print( random.random()) #0.2746445568079129
13 print(random.uniform(1, 10)) #9.887001463194844
14  
15 #随机字符:
16 print(random.choice(\'abcdefg&#%^*f\')) #f
17  
18 #多个字符中选取特定数量的字符:
19 print(random.sample(\'abcdefghij\',3)) #[\'f\', \'h\', \'d\']
20  
21 #随机选取字符串:
22 print( random.choice ( [\'apple\', \'pear\', \'peach\', \'orange\', \'lemon\'] )) #apple
23 #洗牌#
24 items = [1,2,3,4,5,6,7]
25 print(items) #[1, 2, 3, 4, 5, 6, 7]
26 random.shuffle(items)
27 print(items) #[1, 4, 7, 2, 5, 3, 6]
 1 import random
 2 checkcode = \'\'
 3 for i in range(4):
 4     current = random.randrange(0,4)
 5     if current != i:
 6         temp = chr(random.randint(65,90))
 7     else:
 8         temp = random.randint(0,9)
 9     checkcode += str(temp)
10 print (checkcode)

3.os模块

提供对操作系统进行调用的接口

 1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
 2 os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
 3 os.curdir  返回当前目录: (\'.\')
 4 os.pardir  获取当前目录的父目录字符串名:(\'..\')
 5 os.makedirs(\'dirname1/dirname2\')    可生成多层递归目录
 6 os.removedirs(\'dirname1\')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
 7 os.mkdir(\'dirname\')    生成单级目录;相当于shell中mkdir dirname
 8 os.rmdir(\'dirname\')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
 9 os.listdir(\'dirname\')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
10 os.remove()  删除一个文件
11 os.rename("oldname","newname")  重命名文件/目录
12 os.stat(\'path/filename\')  获取文件/目录信息
13 os.sep    输出操作系统特定的路径分隔符,win下为"\\\\",Linux下为"/"
14 os.linesep    输出当前平台使用的行终止符,win下为"\\t\\n",Linux下为"\\n"
15 os.pathsep    输出用于分割文件路径的字符串
16 os.name    输出字符串指示当前使用平台。win->\'nt\'; Linux->\'posix\'
17 os.system("bash command")  运行shell命令,直接显示
18 os.environ  获取系统环境变量
19 os.path.abspath(path)  返回path规范化的绝对路径
20 os.path.split(path)  将path分割成目录和文件名二元组返回
21 os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
22 os.path.basename(path)  返回path最后的文件名。如何path以/或\\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
23 os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
24 os.path.isabs(path)  如果path是绝对路径,返回True
25 os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
26 os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
27 os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
28 os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
29 os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时

4.sys模块

1 sys.argv           命令行参数List,第一个元素是程序本身路径
2  sys.exit(n)        退出程序,正常退出时exit(0)
3  sys.version        获取Python解释程序的版本信息
4  sys.maxint         最大的Int值
5  sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
6  sys.platform       返回操作系统平台名称
7  sys.stdout.write(\'please:\')
8  val = sys.stdin.readline()[:-1]

5.shutil模块

参考http://www.cnblogs.com/wupeiqi/articles/4963027.html 

 

6.json和pickle模块

 

用于序列化的两个模块

  • json,用于字符串 和 python数据类型间进行转换

  • pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

7. shelve模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

 1 import shelve
 2   
 3 d = shelve.open(\'shelve_test\') #打开一个文件 
 4   
 5 class Test(object):
 6     def __init__(self,n):
 7         self.n = n
 8   
 9   
10 t = Test(123)  
11 t2 = Test(123334)
12   
13 name = ["alex","rain","test"] 
14 d["test"] = name #持久化列表
15 d["t1"] = t      #持久化类
16 d["t2"] = t2
17   
18 d.close()

 

8.xml处理模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

xml的格式如下,就是通过<>节点来区别数据结构的:

 1 <?xml version="1.0"?>
 2 <data>
 3     <country name="Liechtenstein">
 4         <rank updated="yes">2</rank>
 5         <year>2008</year>
 6         <gdppc>141100</gdppc>
 7         <neighbor name="Austria" direction="E"/>
 8         <neighbor name="Switzerland" direction="W"/>
 9     </country>
10     <country name="Singapore">
11         <rank updated="yes">5</rank>
12         <year>2011</year>
13         <gdppc>59900</gdppc>
14         <neighbor name="Malaysia" direction="N"/>
15     </country>
16     <country name="Panama">
17         <rank updated="yes">69</rank>
18         <year>2011</year>
19         <gdppc>13600</gdppc>
20         <neighbor name="Costa Rica" direction="W"/>
21         <neighbor name="Colombia" direction="E"/>
22     </country>
23 </data>

xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml

 1 import xml.etree.ElementTree as ET
 2  
 3 tree = ET.parse("xmltest.xml")
 4 root = tree.getroot()
 5 print(root.tag)
 6  
 7 #遍历xml文档
 8 for child in root:
 9     print(child.tag, child.attrib)
10     for i in child:
11         print(i.tag,i.text)
12  
13 #只遍历year 节点
14 for node in root.iter(\'year\'):
15     print(node.tag,node.text)

修改和删除xml文档内容

 1 import xml.etree.ElementTree as ET
 2  
 3 tree = ET.parse("xmltest.xml")
 4 root = tree.getroot()
 5  
 6 #修改
 7 for node in root.iter(\'year\'):
 8     new_year = int(node.text) + 1
 9     node.text = str(new_year)
10     node.set("updated","yes")
11  
12 tree.write("xmltest.xml")
13  
14  
15 #删除node
16 for country in root.findall(\'country\'):
17    rank = int(country.find(\'rank\').text)
18    if rank > 50:
19      root.remove(country)
20  
21 tree.write(\'output.xml\')

自己创建xml文档

 1 import xml.etree.ElementTree as ET
 2  
 3  
 4 new_xml = ET.Element("namelist")
 5 name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
 6 age = ET.SubElement(name,"age",attrib={"checked":"no"})
 7 sex = ET.SubElement(name,"sex")
 8 sex.text = \'33\'
 9 name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
10 age = ET.SubElement(name2,"age")
11 age.text = \'19\'
12  
13 et = ET.ElementTree(new_xml) #生成文档对象
14 et.write("test.xml", encoding="utf-8",xml_declaration=True)
15  
16 ET.dump(new_xml) #打印生成的格式

9.PyYAML模块

Python也可以很容易的处理ymal文档格式,只不过需要安装一个模块,参考文档:http://pyyaml.org/wiki/PyYAMLDocumentation 

10.ConfigParser模块

用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser。

来看一个好多软件的常见文档格式如下

 1 [DEFAULT]
 2 ServerAliveInterval = 45
 3 Compression = yes
 4 CompressionLevel = 9
 5 ForwardX11 = yes
 6  
 7 [bitbucket.org]
 8 User = hg
 9  
10 [topsecret.server.com]
11 Port = 50022
12 ForwardX11 = no

如果想用python生成一个这样的文档怎么做呢?

 1 import configparser
 2  
 3 config = configparser.ConfigParser()
 4 config["DEFAULT"] = {\'ServerAliveInterval\': \'45\',
 5                       \'Compression\': \'yes\',
 6                      \'CompressionLevel\': \'9\'}
 7  
 8 config[\'bitbucket.org\'] = {}
 9 config[\'bitbucket.org\'][\'User\'] = \'hg\'
10 config[\'topsecret.server.com\'] = {}
11 topsecret = config[\'topsecret.server.com\']
12 topsecret[\'Host Port\'] = \'50022\'     # mutates the parser
13 topsecret[\'ForwardX11\'] = \'no\'  # same here
14 config[\'DEFAULT\'][\'ForwardX11\'] = \'yes\'
15 with open(\'example.ini\', \'w\') as configfile:
16    config.write(configfile)

写完了还可以再读出来哈。

 1 >>> import configparser
 2 >>> config = configparser.ConfigParser()
 3 >>> config.sections()
 4 []
 5 >>> config.read(\'example.ini\')
 6 [\'example.ini\']
 7 >>> config.sections()
 8 [\'bitbucket.org\', \'topsecret.server.com\']
 9 >>> \'bitbucket.org\' in config
10 True
11 >>> \'bytebong.com\' in config
12 False
13 >>> config[\'bitbucket.org\'][\'User\']
14 \'hg\'
15 >>> config[\'DEFAULT\'][\'Compression\']
16 \'yes\'
17 >>> topsecret = config[\'topsecret.server.com\']
18 >>> topsecret[\'ForwardX11\']
19 \'no\'
20 >>> topsecret[\'Port\']
21 Python之freshman04

Python之freshman01

Python???freshman02

如何在 python 中并行化以下代码片段?

Python之如何优雅的重试

python之模块和包