模块相关知识:

定义:用来从逻辑上组织python代码(变量、函数、类、逻辑:实现一个功能)本质就是以.py结尾的python文件(文件名:test.py,对应的模块名:test)

附注:包:是用来从逻辑上组织模块的,本质就是一个目录(必须带有一个_init_.py文件)

导入方法:

(1)import module_name     import module1_name,module2_name

(2)from module_1 import *     from module_1 import m1,m2,m3     from modul_1 import logger as logger_1

import本质(路径搜索和搜索路径)

导入模块的本质就是把python文件解释一遍。要解释该python文件,就要先找到这个模块在哪儿(即这个模块的路径位置)

举例:

(1)import module_1,本质就是把module_1中的所有代码解释了一遍复制给module_1 = (all_code)

调用方式:module_1.name,module_1.say_hello()

(2)from module_1 import name,本质就是把modul_1中的name变量放到当前位置并执行name = "Mr Wu"

导入包的本质就是解释该包下的_init_.py文件

模块的分类:

a:标准库

b:开源模块

c:自定义模块

标准库:

(1)time和datetime

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

附注:UTC即格林威治天文时间,世界标准时间。再中国为UTC+8,DST即夏令时。

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

元组方式:struct_time元组共有九个元素,返回struct_time的函数主要有gmtime(),localtime(),strftime()。

  1. import time
  2. t = time.time()#获取时间戳
    time.localtime(t)#获取UTC+*的struct_time元组
    time.gmtime(t)#获取UTCstruct_time元组
  3. strftime("格式",struct_time)---->"格式化字符串"
  4. strptime("格式化的字符串","格式")---->struct_time
  5. >>>time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) #%Y:x.tm_year %m:x.tm_mon
  6. "2018-09-25 20:19:34"
  7. >>>time.strptime("2018-09-25 20:19:34","%Y-%m-%d %H:%M:%S")
  8. time.struct_time(tm_year=2018,tm_mon=9,tm_mday=25,tm_hour=20,tm_min=19,tm_yday=233,tm_isdst=-1)
  9.  
  10. import datetime
  11. datetime.datetime.now()
  12. #获取当前时间:datetime.datetime(2018, 9, 25, 20, 59, 49, 449321)
  13. datetime.datetime.now()+datetime.timedelta(m)
  14. #m天后的时间:2018-09-25+m 21:03:41.081737
  15. datetime.datetime.now()+datetime.timedelta(hours=m)
  16. #m个小时后的时间:2018-09-25 21+m:03:41.081737
  17. datetime.datetime.now()+datetime.timedelta(minutes=m)
  18. #m分钟后的时间:2018-09-25 21:03+m:41.081737
  19. c_time = datetime.datetime.now()
  20. print(c_time.replace(minute=3,hour=2))
  21. #时间替换,2018-09-25 02:03:41.081737

(2)random模块:

  1. print(random.random()) #0.829382
  2. #random.random()用于生成一个0到1之间的随机浮点数
  3. print(random.uniform(1,10))
  4. #random.uniform(n,m)用于生成一个n到m之间的随即浮点数
  5. print(random.randint(1,7)) #
  6. #random.randint()的函数原型是:random.randint(a,b),用于生成一个指定范围内的整数。
  7. #其中参数a是上限,参数b是下限,生成的随机数:a<=n<=b
  8. print(random.randrange(1,10) #
  9. #random.randrange()的函数原型为:random.randrange([start],stop[,step]),
  10. #从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10,100,2),
  11. #结果相当于从[10,12,14......,96,98]序列中获取一个随机数
  12. #random.randrange(10,100,2)在结果上与random.choice(range(10,100,2))等效
  13. print(random.choice("liukuni")) #
  14. #random.choice从序列中获取一个随机元素。
  15. #其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。
  16. #这里说明一下:sequence在python中不是一种特定的类型,而是泛指一系列的类型
  17. #list、tuple、字符串都属于sequence
  18. #下面是使用了choice的一些例子:
  19. print(random.choice("学习python")) #学
  20. print(random.choice(["JGood","List","Dict"]) ) #List
  21. print(random.choice(("Tuple","List","Dict")) #List
  22. print(random.sample([1,2,3,4,5],3)) #[1,2,5]
  23. #random.sample的函数原型为:random.sample(sequence,k),从指定序列中随机获取指定长度的片段
  24. #sample不会修改函数原型
  25. print(random.uniform(1,10))
  26. #random.uniform(n,m)用于生成一个n到m之间的随即浮点数
  27. #洗牌
  28. items = [1,2,3,4,5,6,7]
  29. print(items) #[1,2,3,4,5,6,7]
  30. random.shuffle(items)
  31. print(items) #[1,4,7,2,5,3,6]

(3)os模块

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

  1. os.getcwd()获取当前工作目录,及当前脚本工作的目录路径
  2. os.chdir("dirname")改变当前脚本工作目录,相当于shellcd
  3. os.curdir 返回当前目录:('.')(代表当前目录)
  4. os.pardir 获取当前目录的父目录的字符串名:('..')(代表父集目录)
  5. os.makedirs("dirname1/dirname2") 可生成多层递归目录
  6. os.removedirs("dirname1") 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
  7. os.mkdir("dirname") 生成单级目录,相当于shell中的mkdir dirnmae
  8. os.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下为"\r\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.spilt(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,否则返回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. print(sys.argv)#['F:/python学习/projects/s14/day5/练习1.py']
  3. #sys.exit(n),退出程序,正常退出是sys.exit(0)
  4. sys.exit(0)
  5. # sys.version,获取python解释程序的版本信息
  6. print(sys.version)#3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]
  7. #sys.platform,返回操作系统平台名称
  8. print(sys.platform)#win32

(5)shutil模块

  1. import shutil
  2. #copyfileobj(fsrc,fdst[,length=16*1024]),copy文件内容到另一个文件
  3. f = open("names","r")
  4. f_new = open("names2","w")
  5. hutil.copyfileobj(f,f_new)
  6. #copyfile(src,dst),从源src复制到dst中去,当然前提是目标地址时具备可先权限,抛出的异常信息为IOException,
  7. #如果当前的dst已存在的话就会被覆盖掉
  8. shutil.copyfile("names","names1")
  9. #copymode(src,dst),仅复制权限,不更改文件内容、组、用户
  10. shutil.copymode("names","names2")
  11. #copystat(src,dst),复制所有的状态信息,包括权限,组,用户,时间等
  12. shutil.copystat("names","names2")
  13. #copy( src, dst),复制文件的内容以及权限
  14. shutil.copy("names","names2")
  15. #copy2( src, dst),在copy上的基础上再复制文件所有的状态信息
  16. shutil.copy2("names","names2")
  17. #copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,
  18. #ignore_dangling_symlinks=False),递归的复制文件内容及状态信息
  19. shutil.copytree(r"F:\超级下载器",r"F:\m")
  20. #shutil.rmtree(path, ignore_errors=False, onerror=None),递归地删除文件
  21. shutil.rmtree(r"F:\m")
  22. #make_archive(base_name, format, root_dir=None, base_dir=None,
  23. #verbose=0,dry_run=0, owner=None, group=None, logger=None),压缩打包
  24. '''
  25. base_name:压缩打包后地文件名或路径名
  26. format: 压缩或者打包格式 "zip","tar","bztar" or "gztar"
  27. root_dir: 在哪个目录或者文件打包(源文件)
  28. '''
  29. shutil.make_archive("make_archive_test","zip",r"F:\a")#默认打包到当前目录下
    #shutil.move(src, dst) ,递归的移动文件
  1. import shutil
    shutil.move("names1","names2")

(6)zipfile模块

  1. zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFileZipInfo,
    在绝大多数的情况下,我们只需要使用这两个class就可以了。
    ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的。
  1. 一个ZipInfo对象中包含了压缩包内一个文件的信息,
    其中比较常用的是 filename, file_size, header_offset, 分别为文件名,文件大小,文件数据在压缩包中的偏移。
  1. import zipfile
  2. #ZipFile(filename,"w"),创建一个压缩包
  3. zipfile.ZipFile("day5.zip","w")
  4. #把其他的文件压进同一个压缩包
  5. z = zipfile.ZipFile("day5.zip","w")
  6. z.write(r"F:\a")
  7. z.write("I Found You")
  8. #从压缩包里解压缩出一个文件的方法是使用ZipFile的read方法
  9. z = zipfile.ZipFile("day5.zip","r")
  10. print(z.namelist())#['I Found You']
  11. print(z.read(z.namelist()[0]).decode(encoding="gbk"))#输出压缩文件地内容
  12. #解压缩
  13. z = zipfile.ZipFile("day5.zip","r")
  14. z.extractall()

(7)shelve模块

shelve模块时一个简单的key-value将内存数据通过文件持久化地模块,可以持久化任何pickle可支持地python数据格式。key必须是字符串

写:

  1. import shelve
  2. d = shelve.open("shelve_test1")
  3. info = {"name":"Mr Wu","age":19}
  4. names = ["Mr Wu","Jing Jiu","Na Yue"]
  5. d["a"] = info
  6. d["b"] = names
  7. d.close()

读:

  1. d = shelve.open("shelve_test1")
  2. print(d.get("a"))
  3. print(d.get("b"))
    d.close()

(8)xml模块(我自己的电脑中还未安装相关模块(expat))

xml是实现不同语言或程序设计之间进行数据交换地协议,跟json差不多

创建xml:

  1. import xml.etree.ElementTree as ET
  2.  
  3. new_xml = ET.Element("person_info_list")#生成根节点
  4. person_info = ET.SubElement(new_xml,"personinfo",attrib={"people":"yes"})
  5. name = ET.SubElement(person_info,"name")
  6. name.text = "Mr Wu"
  7. age = ET.SubElement(person_info,"age")
  8. age.text = ""
  9. person_info2 = ET.SubElement(new_xml,"personinfo",attrib={"people":"no"})
  10. name = ET.SubElement(person_info2,"name")
  11. name.text = "Alex"
  12. age = ET.SubElement(person_info2,"age")
  13. age.text = ""
  14. et = ET.ElementTree(new_xml)#生成文档对象
  15. et.write("xml_test.xml",encoding="utf-8",xml_declaration=True)
  1. <?xml version='1.0' encoding='utf-8'?>
  2. <person_info_list>
  3. <personinfo people="yes">
  4. <name>Mr Wu</name>
  5. <age>19</age>
  6. </personinfo>
  7. <personinfo people="no">
  8. <name>Alex</name>
  9. <age>34</age>
  10. </personinfo>
  11. </person_info_list>

xml处理:

  1. #获取根节点
  2. tree = ET.parse("xml_test.xml")
  3. root = tree.getroot()
  4. tag = root.tag#根节点的名称
  5. attrib = root.attrib#根节点地属性
  6. print(tag,attrib)
  7. #获取子节点的属性和名称
  8. for child in root:
  9. print(child.tag,child.attrib)
  10. #输出为personinfo {"people":"Yes"} personinfo {"people":"No"}
  11. #获取属性对应的值
  12. for personinfo in root.findall("personinfo"):
  13. people = personinfo.get("people")
  14. name = personinfo.get("name")
  15. print(people,name)
  16. #输出为:"yes" Mr Wu , "No" "Alex"
  17. #遍历xml文档
  18. for child in root:
  19. print(child.tag,child.attrib)
  20. for i in child:
  21. print(i.tag,i.text,i.attrib)
  22. #只遍历name结点
  23. for node in root.iter("name"):
  24. print(node.tag,node.text)

xml修改:

  1. tree = ET.parse("xml_test.xml")
  2. root = tree.getroot()
  3. #修改
  4. for age in root.iter("age"):
  5. new_age = int(age.text)+1
  6. age.text = str(new_age)
  7. age.set("updated","Yes")
  8. tree.write("xml_test1.xml")
  9. #删除
  10. for personinfo in root.findall("personinfo"):
  11. age = int(personinfo.find("age").text)
  12. if age>50:
  13. root.remove(personinfo)
  14. tree.write("xml_test2.xml")

9).yaml模块:

暂定,还未开始学习

(10).configparser模块

ConfigParser 是Python自带的模块, 用来读写配置文件.

配置文件的格式是: []包含的叫section,    section 下有option=value这样的键值

创建:

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

读、修改:

  1. import configparser
  2. config = configparser.ConfigParser()
  3. config.read("example.ini")
  4.  
  5. print(config.defaults())
  6. #OrderedDict([('compressionlevel', '9'), ('serveraliveinterval', '45'), ('compression', 'yes'), ('forwardx11', 'yes')])
  7. #获取所有的section
  8. print(config.sections())#['bitbucket.org', 'topsecret.server.com']
  9. #删除
  10. config.remove_section("bitbucket.org")
  11. with open("example.ini","w") as configfile:
  12. configfile.write(config)
  13. #获取指定的section,指定的option的值
  14. print(config.get("DEFAULT","forwardx11"))#yes
  15. #更新指定section, option的值
  16. config.set("DEFAULT","forwardx11","no")
  17. #写入指定section, 增加新option的值
  18. config.set("DEFAULT","name","Mr Wu")
  19. # 添加新的 section
  20. config.add_section("new_section")
  21. config.set("new_section","new_optipn","new_value")
  22. config.write(open("example.ini","w"))

(11)hashlib模块

hashlib主要提供字符串加密功能,将md5和sha模块整合在了一起,支持md5,sha1,sha256,sha384,sha512等算法

  1. import hashlib
  2. #hashlib主要提供字符串加密功能,将md5和sha模块整合在了一起,支持md5,sha1,sha224,sha256,sha384,sha512等算法
  3. string = "Mr Wu12345"
  4. #md5
  5. md5 = hashlib.md5()
  6. md5.update(string.encode("utf-8"))
  7. res = md5.hexdigest()
  8. print(res)
  9. #sha256
  10. sha256 = hashlib.sha256()
  11. sha256.update(string.encode("utf-8"))
  12. res = sha256.hexdigest()
  13. print(res)
  14. #sha384
  15. sha384 = hashlib.sha384()
  16. sha384.update(string.encode("utf-8"))
  17. res = sha384.hexdigest()
  18. print(res)
  19. #sha512
  20. sha512 = hashlib.sha512()
  21. sha512.update(string.encode("utf-8"))
  22. res = sha512.hexdigest()
  23. print(res)
  24. #以上实验输出结果为:
  25. '''
  26. md5:4e41b58bb0be472b6254a5c48d22d6b7
  27. sha256:f6c91cd8153194b6f4da78807367e439bca62ba441faf48f2c5d0f28131c3862
  28. sha384:e39db18a1a59266a1dcc0c710b4be46f4403aab2deeba1d36f5081b1ce8c5eb3c7fee5cea73bd78e41690be9b1113fbc
  29. sha512:126b9738409cd4d20bf2310f9f0559d2434bc9ad9eabcad56a72b9f9ece6955d3c7ec14e5b33f35a8f1f809cb769463fbe5704112531d673c9aab426246e5ee8
  30. '''
  31. #注意:hashlib加密的字符串类型为二进制编码,直接加密会报如下错误
  32. sha1 = hashlib.sha1()
  33. sha1.update(string)
  34. res = sha1.hexdigest()
  35. print(res)
  36. #TypeError: Unicode-objects must be encoded before hashing
  37. #解决方法:
  38. sha1.update(string.encode("utf-8"))
  39. sha1.update(bytes(string,encoding="utf-8"))

常用方法:

hash.update(arg)更新哈希对象以字符串参数,注意:如果同一个hash对象反复调用该方法,
则m.update(a),m.update(b),等效于m.update(a+b)

  1. m = hashlib.md5()
  2. m.update(b"a")
  3. res = m.hexdigest()
  4. print("第一次a加密",res)
  5. m.update(b"b")
  6. res = m.hexdigest()
  7. print("第二次b加密",res)
  8. m1 = hashlib.md5()
  9. m1.update(b"b")
  10. res = m1.hexdigest()
  11. print("b单独加密",res)
  12. m2 = hashlib.md5()
  13. m2.update(b"ab")
  14. res = m2.hexdigest()
  15. print("ab单独加密",res)
  16. #以上实验结果
  17. '''
  18. 第一次a加密 0cc175b9c0f1b6a831c399e269772661
  19. 第二次b加密 187ef4436122d1cc2f40dc2b92f0eba0
  20. b单独加密 92eb5ffee6ae2fec3ad71c777531578f
  21. ab单独加密 187ef4436122d1cc2f40dc2b92f0eba0
  22. '''

hash.digest()返回摘要,作为二进制数据字符串值

hash.hexdigest()返回摘要,作为二进制数据字符串值

hash.copy()复制

高级加密:

以上算法虽然厉害,但存在缺陷,即:可以通过撞库反解。所以有必要对加密算法中添加自定义的key再来做加密

  1. import hashlib
  2. low = hashlib.md5()
  3. low.update(b"Mr Wu")
  4. res = low.hexdigest()
  5. print("普通加密:",res)
  6.  
  7. high = hashlib.md5(b"")
  8. high.update(b"Mr Wu")
  9. res = high.hexdigest()
  10. print("高级加密:",res)
  11. #以上实验的结果
  12. '''
  13. 普通加密: 72420ab5c6befd72f79850d4a896d0a7
  14. 高级加密: f02884ca74913c058473420eb3a45e34
  15. '''

 (12)正则表达式

  1. import re
  2. #2.1开始使用re
  3. #将正则表达式编译成pattern对象
  4. pattern = re.compile(r"hello")
  5. #使用pattern匹配文本,获得匹配结果,无法匹配时将返回None
  6. match = pattern.match("hello world")
  7. if match:
  8. #使用match获得分组信息
  9. print(match.group())
  10. #输出:hello
  11. #简写方法:
  12. m = re.match(r"hello","hello world!")
  13. print(m.group())#hello
  14. #2.2match
  15. #Match对象是一次匹配的结果,包含了很多关于此次匹配的信息,可以使用Match提供的可读属性或方法来获取这些信息。
  16. m = re.match(r"(\w+) (\w+)(?P<sign>.*)","hello world!")
  17. print("m.string:",m.string)
  18. print("m.re:",m.re)
  19. print("m.pos:",m.pos)
  20. print("m.endpos:",m.endpos)
  21. print("m.lastindex:",m.lastindex)
  22. print("m.lastgroup:",m.lastgroup)
  23.  
  24. print("m.group(1,2):",m.group(1,2))
  25. print("m.groups():",m.groups())
  26. print("m.groupdict():",m.groupdict())
  27. print("m.start(2):",m.start(2))
  28. print("m.end(2):",m.end(2))
  29. print("m.span(2):",m.span(2))
  30. print("m.expand():",m.expand(r'\2 \1\3'))
  31. #以上实验的输出结果:
  32. '''
  33. m.string: hello world!
  34. m.re: re.compile('(\\w+) (\\w+)(?P<sign>.*)')
  35. m.pos: 0
  36. m.endpos: 12
  37. m.lastindex: 3
  38. m.lastgroup: sign
  39. m.group(1,2): ('hello', 'world')
  40. m.groups(): ('hello', 'world', '!')
  41. m.groupdict(): {'sign': '!'}
  42. m.start(2): 6
  43. m.end(2): 11
  44. m.span(2): (6, 11)
  45. m.expand(): world hello!
  46.  
  47. '''
  48. #2.3pattern
  49. p = re.compile(r'(\w+) (\w+)(?P<sign>.*)',re.DOTALL)
  50. print("p.pattern:",p.pattern)
  51. print("p.flags:",p.flags)
  52. print("p.groups:",p.groups)
  53. print("p.groupindex",p.groupindex)
  54. #======output========
  55. '''
  56. p.pattern: (\w+) (\w+)(?P<sign>.*)
  57. p.flags: 48
  58. p.groups: 3
  59. p.groupindex {'sign': 3}
  60. '''
  61. #实例方法[re模块方法]
  62. pattern = re.compile(r'world')
  63. match = pattern.match("hello world")
  64. print(match)#None
  65. match = pattern.search("hello world")
  66. print(match.group())#world
  67. p = re.compile(r'\d+')
  68. print(p.split('sad219bxckjb39dksb3'))
  69. #------output------
  70. #['sad', 'bxckjb', 'dksb', '']
  71. print(p.findall("dsakh2139bsdk392fhs3kj3h3"))
  72. #------output------
  73. #['2139', '392', '3', '3', '3']
  74. m = p.finditer("sahd3sak32xsfi8dcsk3223sa1")
  75. #返回一个顺序访问每一个匹配结果(match对象)的迭代器
  76. for i in m:
  77. print(i.group())
  78. #-----output------
  79. #3 32 8 3223 1
  80. #sub(repl, string[, count]) | re.sub(pattern, repl, string[, count]):
  81. #使用repl替换string中每一个匹配的子串后返回替换后的字符串。
  82. #当repl是一个字符串时,可以使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。
  83. #当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换
  84. #(返回的字符串中不能再引用分组)count用于指定最多替换次数,不指定时全部替换
  85. p = re.compile(r'(\w+) (\w+)')
  86. s = "i say, hello world!"
  87. print(p.sub(r"\2 \1",s))
  88. #-----output------
  89. #say i, world hello!
  90. def func(m):
  91. return m.group(1).title() + ' ' + m.group(2).title()
  92. print(p.sub(func,s))
  93. #-----output-----
  94. #I Say, Hello World!

python第五周:模块、标准库的更多相关文章

  1. Python OS模块标准库的系统接口及操作方法

    Python OS模块标准库的系统接口及操作方法 os.name 返回当前操作系统名,定义了'posix','nt','mac','os2','ce','java'(我使用win7/python3.1 ...

  2. Python学习笔记13:标准库之子进程(subprocess包)

    ubprocess包主要功能是运行外部的命令和程序.从这个意义上来说,subprocess的功能与shell类似. subprocess以及经常使用的封装函数 当我们执行python的时候,我们都是在 ...

  3. Python(五)模块

    本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...

  4. python系列十七:Python3 标准库概览

    #!/usr/bin/python #-*-coding:gbk-*- #Python3 标准库概览'''操作系统接口os模块提供了不少与操作系统相关联的函数.建议使用 "import os ...

  5. Python学习笔记16:标准库多线程(threading包裹)

    Python主要是通过标准库threading包来实现多线程. 今天,互联网时代,所有的server您将收到大量请求. server要利用多线程的方式的优势来处理这些请求,为了改善网络port读写效率 ...

  6. Python学习笔记8:标准库之正則表達式

    Python拥有强大的标准库.从如今起,開始学习标准库中提供的一些经常使用功能. 首先看正則表達式(regular expression),它的主要功能是从字符串(string)中通过特定的模式(pa ...

  7. Python笔记2----包、模块、库、条件循环

    包.模块.库 包指的是 : 文件夹 模块和库就是.py文件. 其中,库是一些功能相同的模块的集合,其也是模块. 1.import 模块 2.form 库 import 模块 3.import 包.子包 ...

  8. Python学习笔记9:标准库之日期时间(time包,datetime包)

    一 time包 sleep([float time]) 延迟一段以浮点数表示的秒数 time包基于C语言的库函数(library functions). Python的解释器一般是用C编写的,Pyth ...

  9. 吴裕雄--天生自然python学习笔记:Python3 标准库概览

    操作系统接口 os模块提供了不少与操作系统相关联的函数. >>> import os >>> os.getcwd() # 返回当前的工作目录 'C:\\Python ...

随机推荐

  1. 【Android界面实现】SlidingMenu最新版本号使用具体解释

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在非常久之前的一篇文章中,简单的介绍了一下开源项目SlidingMenu控件的使用,这一篇文章,将比較具体的 ...

  2. POJ2391 Ombrophobic Bovines 网络流拆点+二分+floyed

    题目链接: id=2391">poj2391 题意: 有n块草地,每块草地上有一定数量的奶牛和一个雨棚,并给出了每一个雨棚的容(牛)量. 有m条路径连接这些草地  ,这些路径是双向的, ...

  3. 初步了解Shuttle ESB

    ESB:EnterpriseService Bus,即企业服务总线.它是传统中间件技术与XML.Web服务等技术结合的产物.从面向服务体系架构发展而来. ESB採用了"总线"这种模 ...

  4. @RequiresPermissions 注解说明

    @RequiresAuthentication验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时.@RequiresUser验证用户是否被记忆,user有 ...

  5. friend(hdoj 1719)

    Friend Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. Wannafly挑战赛25 C 期望操作数 数学

    题目 题意:给你你一个数x和一个数q,x<=q,每一次可以等概率把x变成[x,q]中任意一个数,问变成q的步数的期望,输出对998244353取模,多组询问 题解:首先肯定的是,可以预处理,因为 ...

  7. javascript中的分号【;】

    以前一直以为,在编写js代码的时候,如果在代码后面不添加分号,JavaScript会自动填补分号.最近看了权威指南,才突然发现一直理解有误,而且关于分号的使用,还有很多需要注意的地方. 1.分号的省略 ...

  8. linux 标准输出和后台运行

    一.后台运行程序 至需要在命令后面加上一个 & 即可 # command & 例如: python test.py & 二.标准输出.标准错误输出 # command > ...

  9. Android之Action Bar

    Action Bar在实际应用中,很好地为用户提供了导航,窗口位置标识,操作点击等功能.它出现于Android3.0(API 11)之后的版本中,在2.1之后的版本中也可以使用. 添加与隐藏Actio ...

  10. 在APP开发设计过程中:如何设计启动页面?

    心理学上有一个“7秒理论”,说的是,一个人对另一个人的印象,在初次见面的七秒内就会形成,最近更有研究表明,这个时间可能更短——不到1秒.所以初次见面所展示的形象真的很重要.同理,用户在使用APP时,每 ...