博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day21
阅读量:4693 次
发布时间:2019-06-09

本文共 9641 字,大约阅读时间需要 32 分钟。

 个人练习

# coding=utf-8import re# print(re.findall("a..x","asdfdaesx"))     # . 通配符# print(re.findall('^a..x',"asdfdaesx"))    # ^ 只能在字符串的开头匹配内容# print(re.findall('^a..x$',"asdfdaesx"))    #  $ 作为结尾匹配的# print(re.findall('a..x$',"asdfdaesarrx"))    #  $ 作为结尾匹配的# 重复符号   * + ? {}# print(re.findall('alex*',"asdfsdfalexxx")) # * 0到无穷次# print(re.findall('alex*',"asdfsdfale")) # * 0到无穷次        匹配方式:贪婪匹配# print(re.findall('alex+',"asdfsdfalexxx")) # + 1到无穷次    匹配方式:贪婪匹配# print(re.findall('alex+',"asdfsdfale")) # + 1到无穷次# 把贪婪匹配改成惰性匹配,在后面加?# ret=re.findall('abc*?','abcccccc')# print(ret) # ['ab']#  ?匹配【0,1】# print(re.findall('alex?',"asdfsdfalexxx"))   #? 只能匹配0个或者1个     匹配方式:贪婪匹配# print(re.findall('alex?',"asdfsdfale"))   #? 只能匹配0个或者1个# {} 要取多少就取多少# {0,}==*# {1,}==+# {0,1}==?# {6} ==6次# {0,6}==0到6次# print(re.findall('alex{6}',"asdfsdfalexxx"))# print(re.findall('alex{0,6}',"asdfsdfalexxx"))# print(re.findall('alex{0,1}',"asdfsdfalexxx"))# 元字符之字符集[]:没有特殊符号# print(re.findall('x[yz]','xyuuuuxzuu'))# print(re.findall('x[yz]p','xypuuuuxzpuu'))# print(re.findall('x[y,z]p','xypuuuuxzpux,pu'))# print(re.findall('q[a*z]','sdfsqaa'))# print(re.findall('q[a*z]','sdfsq*'))# print(re.findall('q[a-z]','quos'))  # 只是取a到z其中的一个# print(re.findall('q[a-z]*','quos'))  # 字符集重复# print(re.findall('q[a-z]*','quossdfsdf9'))   # 9不符合a到z的条件,所以不会出现# print(re.findall('q[0-9]*','quossdfsdf9'))# print(re.findall('q[0-9]*','q888uossdfsdf9'))# print(re.findall('q[0-9]*','q888uossdfsdfq9'))# print(re.findall('q[A-Z]*','q888uossdfsdfq9'))# print(re.findall('q[^a-z]','q888uossdfsdfq9'))   # 匹配不是a到z的  ‘非’#  #在字符集里有功能的符号: - ^ \,其他的都是正常的符号# print(eval("12+(34*6+2-5*(2-1))"))# print(re.findall("\([^()]*\)","12+(34*6+2-5*(2-1))"))# \d  匹配任何十进制数;它相当于类 [0-9]。# print(re.findall('\d','12+(34*6+2-5*(2-1))'))# print(re.findall('\d+','12+(34*6+2-5*(2-1))'))# \D 匹配任何非数字字符;它相当于类 [^0-9]。# print(re.findall('\D+','12+(34*6+2-5*(2-1))'))# \s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。# print(re.findall('\s+','hello world'))# print(re.findall('\S+','hello world'))# print(re.findall('\w','hello world'))# print(re.findall('\W','hello world'))# print(re.findall('www.baidu','www.baidu'))# print(re.findall('www\.baidu','www/baidu'))# print(re.findall('www\.baidu','www.baidu'))# print(re.findall('www*baidu','www*baidu'))# print(re.findall('www\*baidu','www*baidu'))
re模块练习

 

模块(modue)的概念:

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。

使用模块有什么好处?

最大的好处是大大提高了代码的可维护性。

其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。

所以,模块一共三种:

  • python标准库
  • 第三方模块
  • 应用程序自定义模块

另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突

 

 

 

 

time模块(* * * *)

三种时间表示

在Python中,通常有这几种方式来表示时间:

  • 时间戳(timestamp) :         通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
  • 格式化的时间字符串
  • 元组(struct_time)   :         struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

time时间模块

import time# 时间戳# print(time.time())    #1970年到现在有多少秒,做计算使用# 结构化时间# a = time.localtime()# print(a)# print(a.tm_year)# print(a.tm_wday)  #从零开始数,表示周几# print(time.gmtime())  #世界标椎时间# print(time.localtime(1236543321))  # 把时间戳转化成了结构化时间# 将结构化时间转化成时间戳# print(time.mktime(time.localtime()))# 将结构化时间转换成字符串时间# print(time.strftime('%Y-%m-%d %X' ,time.localtime()))    # X表示时分秒# 将字符串时间转化成结构化时间# print(time.strptime('2019:6:18:7:38:24','%Y:%m:%d:%X'))print(time.asctime()) # 将一个结构化时间转换成一个固定的字符串时间print(time.ctime())   # 将一个时间戳转换成一个固定的字符串时间 更直观 import datetime
print(datetime.datetime.now())
 

            

 

random模块(* *)

 print(random.random())#(0,1)----float

 print(random.randint(1,3))  #[1,3]

 print(random.randrange(1,3)) #[1,3)

 print(random.choice([1,'23',[4,5]]))#23

 print(random.sample([1,'23',[4,5]],2))#[[4, 5], '23']

 print(random.uniform(1,3))#1.927109612082716

 

item
=
[
1
,
3
,
5
,
7
,
9
]

random.shuffle(item)

print(item)

 

验证码
def v_code():     ret=""
for i in range(5):        num = random.randint(0,9)        alf = chr(random.randint(65,122))        s =str(random.choice([num,alf]))        ret+=s    return ret

 

 os模块(* * * *)

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

sys模块(* * *)

sys.argv           命令行参数List,第一个元素是程序本身路径

sys.exit(n)        退出程序,正常退出时exit(
0
)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的
Int
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称

进度条:

 

import sys,timefor i in range(10):    sys.stdout.write('#')    time.sleep(1)    sys.stdout.flush(

 

json & pickle(* * * *)

json(做数据交换使用)

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

 

xml模块(* *)

 

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

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

2
2008
141100
5
2011
59900
69
2011
13600
xml数据

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

 

import xml.etree.ElementTree as ET tree = ET.parse("xmltest.xml")root = tree.getroot()print(root.tag) #遍历xml文档for child in root:    print(child.tag, child.attrib)    for i in child:        print(i.tag,i.text) #只遍历year 节点for node in root.iter('year'):    print(node.tag,node.text)#---------------------------------------import xml.etree.ElementTree as ET tree = ET.parse("xmltest.xml")root = tree.getroot() #修改for node in root.iter('year'):    new_year = int(node.text) + 1    node.text = str(new_year)    node.set("updated","yes") tree.write("xmltest.xml")  #删除nodefor country in root.findall('country'):   rank = int(country.find('rank').text)   if rank > 50:     root.remove(country) tree.write('output.xml')

自己创建xml文档:

import xml.etree.ElementTree as ET  new_xml = ET.Element("namelist")name = ET.SubElement(new_xml,"name",attrib={
"enrolled":"yes"})age = ET.SubElement(name,"age",attrib={
"checked":"no"})sex = ET.SubElement(name,"sex")sex.text = '33'name2 = ET.SubElement(new_xml,"name",attrib={
"enrolled":"no"})age = ET.SubElement(name2,"age")age.text = '19' et = ET.ElementTree(new_xml) #生成文档对象et.write("test.xml", encoding="utf-8",xml_declaration=True) ET.dump(new_xml) #打印生成的格式

 

 re模块(* * * * *)    (day22最后一集)

 就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行

字符匹配(普通字符,元字符):

1 普通字符:大多数字符和字母都会和自身匹配

              >>> re.findall('alvin','yuanaleSxalexwupeiqi')
                      ['alvin'] 

2 元字符:. ^ $ * + ? { } [ ] | ( ) \

 

元字符之. ^ $ * + ? { }

import re

 
ret
=
re.findall(
'a..in'
,
'helloalvin'
)
print
(ret)
#['alvin']
 
 
ret
=
re.findall(
'^a...n'
,
'alvinhelloawwwn'
)
print
(ret)
#['alvin']
 
 
ret
=
re.findall(
'a...n$'
,
'alvinhelloawwwn'
)
print
(ret)
#['awwwn']
 
 
ret
=
re.findall(
'a...n$'
,
'alvinhelloawwwn'
)
print
(ret)
#['awwwn']
 
 
ret
=
re.findall(
'abc*'
,
'abcccc'
)
#贪婪匹配[0,+oo]  
print
(ret)
#['abcccc']
 
ret
=
re.findall(
'abc+'
,
'abccc'
)
#[1,+oo]
print
(ret)
#['abccc']
 
ret
=
re.findall(
'abc?'
,
'abccc'
)
#[0,1]
print
(ret)
#['abc']
 
 
ret
=
re.findall(
'abc{1,4}'
,
'abccc'
)
print
(ret)
#['abccc'] 贪婪匹配
 
注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
ret
=
re.findall(
'abc*?'
,
'abcccccc'
)
print
(ret)
#['ab']
 
 

元字符之字符集[]:

#--------------------------------------------字符集[]

ret
=
re.findall(
'a[bc]d'
,
'acd'
)
print
(ret)
#['acd']
 
ret
=
re.findall(
'[a-z]'
,
'acd'
)
print
(ret)
#['a', 'c', 'd']
 
ret
=
re.findall(
'[.*+]'
,
'a.cd+'
)
print
(ret)
#['.', '+']
 
#在字符集里有功能的符号: - ^ \,其他的符号都是正常符号
ret
=
re.findall(
'[1-9]'
,
'45dha3'
)
print
(ret)
#['4', '5', '3']
 
ret
=
re.findall(
'[^ab]'
,
'45bdha3'
)
print
(ret)
#['4', '5', 'd', 'h', '3']
 
ret
=
re.findall(
'[\d]'
,
'45bdha3'
)
print
(ret)
#['4', '5', '3']
 

元字符之转义符\

反斜杠后边跟元字符去除特殊功能,比如\.

反斜杠后边跟普通字符实现特殊功能,比如\d

\d  匹配任何十进制数;它相当于类 [0-9]。

\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b  匹配一个特殊字符边界,比如空格 ,&,#等

ret=re.findall('I\b','I am LIST')

print
(ret)
#[]
ret
=
re.findall(r
'I\b'
,
'I am LIST'
)
print
(ret)
#['I']
 
 

转载于:https://www.cnblogs.com/wuxiping2019/p/11043268.html

你可能感兴趣的文章
我的第一篇博客
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
23 Java学习之RandomAccessFile
查看>>
P2709 小B的询问
查看>>
PHP echo 和 print 语句
查看>>
第一讲 一个简单的Qt程序分析
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
poj 1979 Red and Black(dfs)
查看>>
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
zTree async 动态参数处理
查看>>
Oracle学习之常见错误整理
查看>>
lock_sga引起的ksvcreate :process(m000) creation failed
查看>>
数据库插入数据乱码问题
查看>>
altium annotate 选项设置 complete existing packages
查看>>