python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re相关的知识,希望对你有一定的参考价值。
1.tiim模块,因为方法较多我就写在code里面了,后面有注释
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 print("time".center(60,"-")) 5 print(time.asctime()) #返回字符串格式 外国的时间 6 #Fri Nov 18 11:25:08 2016 7 t = time.localtime() #本地时间 8 #print(t) #这是一个对象所以需要 9 print(t.tm_year,t.tm_yday) 10 #time.struct_time(tm_year=2016, tm_mon=11, tm_mday=18, tm_hour=11, tm_min=25, tm_sec=8, tm_wday=4, tm_yday=323, tm_isdst=0) 11 print(time.time()) #print(time.time()/(3600*24*365)) 算年 12 #1479439871.1401508 时间戳 13 print(time.gmtime()) #utc 时间 14 t = time.localtime(time.time() + 3600*3) #改变时间,针对秒做运算 15 print(t) 16 print(time.asctime(t)) #返回当前时间并且,需要的时间对象 17 print(time.ctime()) #返回当前时间,同上 18 19 #字符串转时间戳 20 print(time.strptime("2016-11-11 23:30","%Y-%m-%d %H:%M")) #转成时间对象了 21 t2 = time.strptime("2016-11-11 23:30","%Y-%m-%d %H:%M") #时间戳 22 print(time.mktime(t2)) 23 24 #时间戳转字符串 25 t2_stamp = time.mktime(t2) #时间戳 26 print(t2_stamp) 27 t3 = time.localtime(t2_stamp) #时间对象 28 t3_str = time.strftime("%Y_%m_%d_%H_%M.log",t3) #日志时间格式 29 print(t3_str)
2.datetiim模块,因为方法较多我就写在code里面了,后面有注释
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 ###datetime 5 #时间加减 可以对天 分钟 小时进行计算 6 print("datetime".center(60,"-")) 7 print(datetime.datetime.now()) 8 print(datetime.datetime.fromtimestamp(time.time()-3600)) 9 print(datetime.datetime.now() - datetime.timedelta(days=3)) #day hours mintes 前面的 + -控制加减 10 11 now = datetime.datetime.now() #可以直接替换时间 12 print(now.replace(month=1,day=3,hour=3))
3.random模块,因为方法较多我就写在code里面了,后面有注释
#!/usr/bin/env python #_*_coding:utf-8_*_ print("random".center(60,"-")) #随机数模块 import random print(random.random()) #随机打印一个小数 print(random.randint(1,2))#包含 print(random.randrange(1,10))#不包含后面值 print(random.sample(range(100),5)) #随机数密码 print(random.sample(‘abcde‘,2)) import string str_sourc = string.ascii_letters + string.digits print(‘‘.join(random.sample(str_sourc,6))) #join好像是可以把列表拆开成字符串 ##随机数脚本 import random checkcode = ‘‘ for i in range(4): current = random.randrange(0,4) if current != i: temp = chr(random.randint(65,90)) #65-90 就是ansi码对应的A-Z的大写 else: temp = random.randint(0,9) checkcode += str(temp) print(checkcode) #生成四位的随机数
3.shutil模块,因为方法较多我就写在code里面了,后面有注释
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #高级的文件,文件夹,压缩包,处理模块 5 import shutil 6 #f1 = open("file_old.txt") 7 #f2 = open("file.new.txt",‘w‘) 8 #shutil.copyfileobj(f1, f2)#因为是对象,所以你要先打开文件 9 #os.path.basename("/var/www/data1") 文件名最后显示data1 10 #os.path.join("/usr/local/data1") 11 #shutil.copy(r"c:笔记","test") #会拷贝到当前目录 上面2条是解释相当于 不需要打开文件 12 #copy 与 copyfile的区别在于,copy是会把权限copy过来 13 #shutil.copyfile(r"c:笔记","test") 14 #shutil.copy2() #拷贝文件和状态 15 #shutil.copytree(r"c:笔记","新笔记") #cp -rf拷贝目录过来 16 #shutil.rmtree()秭归删除 17 #shutil.move()移动 18 19 # shutil.make_archive(base_name, format, ...) 20 # 创建压缩包并返回文件路径,例如:zip、tar 21 # base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 22 # 如:www = > 保存至当前路径 23 # 如: / Users / wupeiqi / www = > 保存至 / Users / wupeiqi / 24 # format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar” 25 # root_dir: 要压缩的文件夹路径(默认当前目录) 26 # owner: 用户,默认当前用户 27 # group: 组,默认当前组 28 # logger: 用于记录日志,通常是logging.Logger对象 29 #shutil.make_archive(r"c:笔记",format="zip",root_dir=r"c:新笔记")
4.shelve模块,因为方法较多我就写在code里面了,后面有注释
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 print("shelve".center(60,"-")) #是一个简单的k,v将内存数据通过文件持久化的模块,可以持久任何pickle 5 #可支持的Python数据格式 6 # import shelve 7 # d = shelve.open(‘shelve_test‘) # 打开一个文件 8 # def stu_data(name,age): 9 # print("register stu",name,age) 10 # name = ["alex", "rain", "test"] 11 # d["test"] = name # 持久化列表 12 # d[‘func‘] = stu_data #内存地址 相当于 2个类型存储 然后用下面的来读取下来 13 # d.close() 14 # #执行过后会出现三个文件 15 # 16 # #应该新打开一个文件来load 17 # import shelve 18 # def stu_data(name,age):#加上就不会报错 19 # print("register stu",name,age) #加上就不会报错 20 # f = shelve.open("shelve_test") 21 # print(f["test"]) #打印出来的是 三个名字 22 # print(f["func"]("test,30")) #会打印不出来,因为func是内存地址,dump的话找对象找不到
5.xml处理模块,因为方法较多我就写在code里面了,后面有注释
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 print("xml".center(60,"-")) 5 # import xml.etree.ElementTree as ET 6 # tree = ET.parse("test.xml") 7 # root = tree.getroot() #根节点 data 8 # print(root.tag) 9 # # 遍历xml文档 10 # for child in root: 11 # print(child.tag, child.attrib) 12 # for i in child: 13 # print(i.tag, i.text) 14 # # # 只遍历year 节点 15 # for node in root.iter(‘year‘): 16 # print(node.tag, node.text)
5.hashlibl处理模块,因为方法较多我就写在code里面了,后面有注释
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 print("hashlib".center(60,"-")) #一种跟md5相同的效验工具 5 import hashlib 6 m = hashlib.md5() 7 m.update(b"alex") 8 print(m.hexdigest()) #md5值 9 m.update(b"li") 10 print(m.hexdigest()) 11 m2 = hashlib.md5() 12 m2.update(b"alexli") 13 print(m2.hexdigest()) #md5竟然是相同的 14 15 m3 = hashlib.sha256() #一般比较安全就256 16 m3.update(b"alexli") 17 print(m3.hexdigest()) 18 19 import hmac 20 h = hmac.new(b‘salt‘,b‘hello‘) 21 print(h.hexdigest()) #这个更安全,一般用于网络上的消息加密传输
6.loggingl处理模块,因为方法较多我就写在code里面了,后面有注释
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 print("logging".center(60,"-")) 5 import logging 6 7 logging.debug("test debug") 8 logging.info("test info") 9 logging.warning("this wron plees zhuyi") 10 logging.error("test error") 11 logging.critical("server is down") #默认warining 以下不打印 12 13 import logging 14 logging.basicConfig(filename=‘example.log‘,level=logging.DEBUG) #打印到文件里面 报警的文件需要放在这下面才能生成 15 logging.basicConfig(filename=‘example.log‘,level=logging.DEBUG,format=‘%(asctime)s %(message)s‘,datefmt=‘%m/%d/%Y %I:%M:%S %p‘)#加入了时间 16 #format()参数里面可以加入级别各种日志格式 可以加一些分隔符 :-等
7.re正则,因为方法较多我就写在code里面了,后面有注释
1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 a = re.match("inet","inet address:10.10.10.10 netmask:20.20.20.20") #前面引号是规则 match是从头开始匹配 5 print(a) # 6 print(a.group())#规则是4个所以显示就是四个 7 #规则地方写入"\w+" \w匹配一个字符[a-zA-Z0-9] \w+匹配多个 8 #‘.‘ 匹配除了\n外的任意一个字符,包括特殊字符 9 #‘+‘ 匹配前一个字符一个或者多个 10 #‘^‘ 匹配字符开头 但是match就是匹配开头,所以没啥意义 11 #‘*‘ 匹配*号前的字符0次或多次 言外之意就是可以匹配不到 会返回空 12 #‘?‘ 匹配字符一次或者0次 不能多 13 #‘{m}‘ 匹配前一个字符m次 "\w{3}" 14 #‘{n,m}‘ 匹配前一个字符多少到多少次 "\w{5,8}" 15 #‘|‘ 匹配左边或右边的字符 "inet|INET" 16 #(...) 分组匹配 17 # print(re.search("(\d){2}(\d){2}(\d){2}","123456789 name:alex").group()) #这是匹配出来的结果 123456 18 # print(re.search("(\d){2}(\d){2}(\d){2}","123456789 name:alex").groups()) #2 4 6 19 # print(re.search("(\d\d)(\d\d)(\d\d)","123456789 name:alex").groups()) #12 34 56 20 # print(re.search("(\d{2})(\d{2})(\d{2})","123456789 name:alex").groups()) 21 #‘\A‘ 只从字符开头匹配 22 #‘\z‘ 以数字结尾 同$ 23 #‘\d‘ 匹配0-9 24 #‘\D‘ 匹配非数字 25 #‘\w‘ 匹配[a-zA-Z0-9] 26 #‘\W‘ 匹配非[a-zA-Z0-9] 就是特殊字符 27 #‘s‘ 匹配空白字符 ,\t \n \r 28 #‘(?P<name>...)‘ #分组匹配 29 print(re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict()) 30 #groupdic() 字典形式 groups()列表 31 print(re.search("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","inet address:10.10.10.10 netmask:20.20.20.20")) 32 print(re.search("(\d{1,3}\.){3}\d{1,3}","inet address:10.10.10.10 netmask:20.20.20.20")) 33 print(re.findall("\d+","a555b3c5d6s")) #search 是匹配到了第一个就开始返回了,而findall是匹配所有了 34 print(re.findall("[a-z]","a555b3c5d6s")) 35 36 37 print(re.split("\d+","a555b3c5d6s6")) #split也是数字作为分隔符,但是侯后面会多出一个元素 38 print(re.sub("\d+","|","a555b3c5d6s6")) #匹配字符替换 以什么为分隔符给替换 39 print(re.sub("\d+","|","a555b3c5d6s6",count=2)) 40 41 #反斜杠的困扰 比如目录格式 42 print(re.split("\\\\",r"c:\users\data\python35")) #加r就是字符串对待 这是以\为分隔符 43 print(re.search("a","ABC",flags=re.I)) #re.I 忽律大小写 44 print(re.search("^a","\nabc\neee",flags=re.M)) #re.M 匹配多行要不\n就换行 45 print(re.search(".+","\nabc\neee",flags=re.S)) #多行都匹配出来而且\n也匹配出来
8.configparser正则,因为方法较多我就写在code里面了,后面有注释
以上是关于python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re的主要内容,如果未能解决你的问题,请参考以下文章
python学习道路(day7note)(subprocess模块,面向对象)
python学习道路(day9note)(socketserver编程,ftp)
python学习道路(day8note)(抽象类,类的方法,异常处理,socket编程)