博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
桐花万里python路-基础篇-11-常用模块
阅读量:4624 次
发布时间:2019-06-09

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

  • time:时间
    • 时间元组
      序号 属性
      0 tm_year 2008
      1 tm_mon 1 到 12
      2 tm_mday 1 到 31
      3 tm_hour 0 到 23
      4 tm_min 0 到 59
      5 tm_sec 0 到 61 (60或61 是闰秒)
      6 tm_wday 0到6 (0是周一)
      7 tm_yday 1 到 366(儒略历)
      8 tm_isdst -1, 0, 1, -1是决定是否为夏令时的旗帜
      %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 当前时区的名称%% %号本身
      • time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
      • time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
      • time.time():返回当前时间的时间戳。
      • time.mktime(t):将一个struct_time转化为时间戳。
      • time.sleep(secs):线程推迟指定的时间运行。单位为秒。
      • time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。
      • time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
      • time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。

      • time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作
        import timeprint(time.time())print(time.mktime(time.localtime()))print(time.gmtime())  # 可加时间戳参数print(time.localtime())  # 可加时间戳参数print(time.strptime('2018-01-11', '%Y-%m-%d'))print(time.strftime('%Y-%m-%d %H:%M:%S'))  # 默认当前时间print(time.strftime('%Y-%m-%d', time.localtime()))  # 默认当前时间print(time.asctime())# 返回时间格式"Thu Jan 18 16:37:24 2018"print(time.asctime(time.localtime()))# 返回时间格式"Thu Jan 18 16:37:24 2018"print(time.ctime(time.time()))# 返回时间格式"Thu Jan 18 16:37:24 2018""""1516264644.64156371516264644.0time.struct_time(tm_year=2018, tm_mon=1, tm_mday=18, tm_hour=8, tm_min=37, tm_sec=24, tm_wday=3, tm_yday=18, tm_isdst=0)time.struct_time(tm_year=2018, tm_mon=1, tm_mday=18, tm_hour=16, tm_min=37, tm_sec=24, tm_wday=3, tm_yday=18, tm_isdst=0)time.struct_time(tm_year=2018, tm_mon=1, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=11, tm_isdst=-1)2018-01-18 16:37:242018-01-18Thu Jan 18 16:37:24 2018Thu Jan 18 16:37:24 2018Thu Jan 18 16:37:24 2018"""
        View Code
  • datetime:时间
    • datetime模块的接口则更直观、更容易调用
      • datetime.date:表示日期的类。常用的属性有year, month, day;
      • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
      • datetime.datetime:表示日期时间。
      • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
      • datetime.tzinfo:与时区有关的相关信息
        import datetime# 把一个时间戳转为datetime日期类型print(datetime.date.fromtimestamp(1512322222)) # 2017-12-04# 返回当前的datetime日期类型d = datetime.datetime.now()print(d.date(),d.year,d.month,d.day)# 2018-01-18 2018 1 18print(d.time(),d.hour,d.minute,d.second,d.microsecond) # 16:45:47.782493 16 45 47 782493# 时间运算newdt =datetime.datetime.now() + datetime.timedelta(4) #当前时间 +4天print(newdt) # 2018-01-22 16:48:28.938439newhr = datetime.datetime.now() + datetime.timedelta(hours=4)print(newhr)  # 2018-01-18 20:51:57.899933# 时间替换print(d.replace(year=2099,day=30).strftime("%Y-%m-%d %H:%M:%S")) # 2099-01-30 16:51:57
  • random:随机
    import randomprint(random.randrange(1,10)) #返回1-10之间的一个随机数,不包括10print(random.randint(1,10)) #返回1-10之间的一个随机数,包括10print(random.randrange(0, 100, 2)) #随机选取0到100间的偶数print(random.random())  #返回一个随机浮点数print(random.choice('abce3#$@1')) #返回一个给定数据集合中的随机字符print(random.sample('abcdefghij',3))  #从多个字符中选取特定数量的字符#生成随机字符串import stringprint(''.join(random.sample(string.ascii_lowercase + string.digits, 6)))#打乱a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]random.shuffle(a)print(a)"""810180.03711666102383363['h', 'a', 'd']tfmj34[5, 2, 1, 8, 9, 7, 4, 0, 6, 3]"""
    View Code
  • 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    输出用于分割文件路径的字符串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       返回操作系统平台名称sys.stdout.write('please:')val = sys.stdin.readline()[:-1]
  • shutil:高级的 文件、文件夹、压缩包 处理模块。对os中文件操作的补充
    • shutil.copyfileobj(fsrc, fdst[, length]),将文件内容拷贝到另一个文件中,可以部分内容
    • shutil.copyfile(src, dst) 拷贝文件
    • shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变
    • shutil.copystat(src, dst) 拷贝状态的信息,包括:mode bits, atime, mtime, flags
    • shutil.copy(src, dst) 拷贝文件和权限
    • shutil.copy2(src, dst) 拷贝文件和状态信息
    • shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件
    • shutil.rmtree(path[, ignore_errors[, onerror]]) 递归的删除文件
    • shutil.move(src, dst) 递归的移动文件
    • shutil.make_archive(base_name, format,...) 创建压缩包并返回文件路径
      • base_name,文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径
      • format 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
      • root_dir  要压缩的文件夹路径(默认当前目录)
      • owner 默认当前用户
      • group 默认当前组
      • logger 用于记录日志,通常是logging.Logger对象
    • 压缩解压 ZipFile 和 TarFile 
      import zipfile# 压缩z = zipfile.ZipFile('laxi.zip', 'w')z.write('a.log')z.write('data.data')z.close()# 解压z = zipfile.ZipFile('laxi.zip', 'r')z.extractall()z.close()
  • json和pickle 序列化
    • json 用于字符串 和 python数据类型间进行转换
    • pickle 仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型
    • pickle反序列化后的对象与原对象是等值的副本对象,类似与deepcopy。
    • pickle在不同版本的Python序列化可能还有差异
    • 都有dumps、dump、loads、load
      • dumps 将 Python 对象编码成 JSON 字符串 或 pickle
      • loads 将已编码的 JSON 字符串 或pickle解码为 Python 对象
      • dump 持久化到文件
      • load 从文件反序列回来
        import jsonimport pickledic = {
        'a':'ss','sss12':'231321'}txt = json.dumps(dic)print(txt)with open('json.txt','w') as f: json.dump(dic,f) with open('json.txt','r') as f: print(json.load(f)) # {'a': 'ss', 'sss12': '231321'}from datetime import datedic['today'] = date.today()with open('pickle.txt','wb') as f: pickle.dump(dic,f)with open('pickle.txt','rb') as f: print(pickle.load(f)) # {'a': 'ss', 'sss12': '231321', 'today': datetime.date(2018, 1, 18)}
  • shelve 一个简单的key-value,将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
    import shelvesp = shelve.open('shelve')sp['dic'] = dicsp['ok'] = ('12','22')sp['123'] = 123.321sp.close()dsp = shelve.open('shelve')print(dsp['dic'],dsp['123'],dsp['ok'])
  • configparse 处理特定格式的文件 ini 
    import configparser# 获取所有节点 sectionsconfig = configparser.ConfigParser()config.read('conf.ini', encoding='utf-8')ret = config.sections()print(ret)# 获取指定节点下所有的键值对 items 包含DEFAULTret = config.items('User')print(ret)# 获取指定节点下所有的键 options 包含DEFAULTret = config.options('User')print(ret)# 获取指定节点下指定key的值v = config.get('sec1', 'user')print(v)# 检查 section has_sectionhas_sec = config.has_section('section1')print(has_sec)# 添加 section add_sectionif not config.has_section('Database'):    config.add_section("Database")    config.write(open('conf.ini', 'w+',encoding='utf-8'))# 删除 section remove_sectionif config.has_section('Database'):    config.remove_section("Database")    config.write(open('conf.ini', 'w+',encoding='utf-8'))# 检查、删除、设置指定组内的键值对# 检查 option has_optionhas_sec = config.has_option('User','name')print(has_sec)# 添加 option setif not config.has_option('DB','password'):    config.set("DB",'password','123')    config.set("DB",'host','123.123.0.12')    config.write(open('conf.ini', 'w+',encoding='utf-8'))# 删除 option remove_optionif config.has_option('DB','password'):    config.remove_option("DB",'password')    config.write(open('conf.ini', 'w+',encoding='utf-8'))

     

  • hashlib 加密相关 
    • 主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
      import hashlibmd = hashlib.md5()print(md)md.update('admin'.encode('utf8'))print(md.digest())print(md.hexdigest())       #21232f297a57a5a743894a0e4a801fc3md.update('admin'.encode('utf8'))print(md.hexdigest())       #f6fdffe48c908deb0f4c3bd36c032e72md2 = hashlib.md5()md2.update('adminadmin'.encode('utf8'))print(md2.hexdigest())      #f6fdffe48c908deb0f4c3bd36c032e72print('-'*50)md3 = hashlib.sha256()md3.update('admin'.encode('utf8'))print(md3.hexdigest())
  • subprocess 实现对系统命令或脚本的调用 
    • run(*popenargs, input=None, timeout=None, check=False, **kwargs) #官方推荐
    • call(*popenargs, timeout=None, **kwargs) #跟上面实现的内容差不多,另一种写法
    • Popen() #上面各种方法的底层封装,执行复杂的系统命令
      • args:shell命令,可以是字符串或者序列类型(如:list,元组)
      • bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
      • stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
      • preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
      • close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
        所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
      • shell:同上
      • cwd:用于设置子进程的当前目录
      • env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
      • universal_newlines:不同系统的换行符不同,True -> 同意使用 \n
      • startupinfo与createionflags只在windows下有效
        将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等 
    •  
      import subprocess# 标准写法subprocess.run(['df','-h'],stderr=subprocess.PIPE,stdout=subprocess.PIPE,check=True)# 涉及到管道|的命令需要这样写subprocess.run('df -h|grep disk1',shell=True) # shell=True的意思是这条命令直接交给系统去执行,不需要python负责解析#执行命令,返回命令执行状态 , 0 or 非0ret = subprocess.call(["ipconfig", "-l"], shell=True)# 执行命令,如果命令结果为0,就正常返回,否则抛异常subprocess.check_call(["ls", "-l"])# 执行命令,如果命令结果为0 ,则返回执行结果,否则抛异常subprocess.check_output(["echo", "Hello World!"])subprocess.check_output("exit 1", shell=True)subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)
  • logging
    • 记录日志且线程安全的模块
    • 日志级别
      • NOTSET =0
      • debug() DEBUG =10
      • info() INFO =20
      • warning() WARNING =30
      • error() ERROR =40
      • critical() CRITICAL =50
    • 写入文件
    • import logginglogging.basicConfig(level=logging.INFO,                    filemode='a',#w|a                    filename='log.txt',                    datefmt='%Y-%m-%d %H:%M:%S',                    format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s'                    )logging.debug('debug message')logging.info('info message')logging.warning('warning message')      #默认显示logging.error('error message')logging.critical('critical message')# level=loggin.INFO意思是,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件里,debug被忽略

      模板

      • %(name)s Logger的名字
      • %(levelno)s 数字形式的日志级别
      • %(levelname)s 文本形式的日志级别
      • %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
      • %(filename)s 调用日志输出函数的模块的文件名
      • %(module)s 调用日志输出函数的模块名|
      • %(funcName)s 调用日志输出函数的函数名|
      • %(lineno)d 调用日志输出函数的语句所在的代码行
      • %(created)f 当前时间,用UNIX标准的表示时间的浮点数表示|
      • %(relativeCreated)d 输出日志信息时的,自Logger创建以来的毫秒数|
      • %(asctime)s 字符串形式的当前时间。默认格式是“2003-07-08 16:49:45,896”。逗号后面的是毫秒
      • %(thread)d 线程ID。可能没有
      • %(threadName)s 线程名。可能没有
      • %(process)d 进程ID。可能没有
      • %(message)s 用户输出的消息
    • 同时输出到屏幕和文件
      logger = logging.getLogger()logger.setLevel(logging.DEBUG)#文件对象fh = logging.FileHandler('log.log')# 屏幕对象ch = logging.StreamHandler()formatter = logging.Formatter('%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s')fh.setFormatter(formatter)ch.setFormatter(formatter)#文件记录logger.addHandler(fh)#屏幕输出logger.addHandler(ch)logger.debug('debug message')logger.info('info message')logger.warning('warning message')      logger.error('error message')logger.critical('critical message')
  • re 正则表达式 :用来匹配字符串的强有力的武器
    • 元字符
      '.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行'^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)'$'     匹配字符结尾, 若指定flags MULTILINE ,re.search('foo.$','foo1\nfoo2\n',re.MULTILINE).group() 会匹配到foo1'*'     匹配*号前的字符0次或多次, re.search('a*','aaaabac')  结果'aaaa''+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']'?'     匹配前一个字符1次或0次 ,re.search('b?','alex').group() 匹配b 0次'{m}'   匹配前一个字符m次 ,re.search('b{3}','alexbbbs').group()  匹配到'bbb''{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']'|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC''(...)' 分组匹配, re.search("(abc){2}a(123|45)", "abcabca456c").group() 结果为'abcabca45''\A'    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的,相当于re.match('abc',"alexabc") 或^'\Z'    匹配字符结尾,同$ '\d'    匹配数字0-9'\D'    匹配非数字'\w'    匹配[A-Za-z0-9]'\W'    匹配非[A-Za-z0-9]'s'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
    • 语法
      • re.match(pattern, string, flags=0) 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
        • pattern:匹配的正则表达式
        • string:要匹配的字符串
        • flags: 用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
        • 返回值 匹配成功re.search方法返回一个匹配的对象,否则返回None
      • re.search(pattern, string, flags=0) 扫描整个字符串并返回第一个成功的匹配
        • pattern:匹配的正则表达式
        • string:要匹配的字符串
        • flags:用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
        • 返回值 匹配成功re.search方法返回一个匹配的对象,否则返回None
      • re.group和re.groups
        • group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组
        • groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号
      • re.findall(pattern, string, flags=0) 如果想要匹配到字符串中所有符合条件的元素
      • re.sub(pattern, repl, string, count=0, flags=0) 用于替换匹配的字符串
        • pattern : 正则中的模式字符串。
        • repl : 替换的字符串,也可为一个函数。
        • string : 要被查找替换的原始字符串。
        • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
      • re.split(pattern, string, maxsplit=0, flags=0)
      • re.fullmatch(pattern, string, flags=0) 
    • Flags标志符
      • re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
      • M(MULTILINE): 多行模式,改变'^'和'$'的行为
      • S(DOTALL): 改变'.'的行为,make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline.
      • X(re.VERBOSE) 可以给你的表达式写注释,使其更可读
    • 其他说明
    • re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配
      import reline = "Cats are smarter than dogs"matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)if matchObj:    print("matchObj.group() : ", matchObj.group())    print("matchObj.group(1) : ", matchObj.group(1))    print("matchObj.group(2) : ", matchObj.group(2))else:    print("No match!!")"""matchObj.group() :  Cats are smarter than dogsmatchObj.group(1) :  CatsmatchObj.group(2) :  smarter"""str = 'hello world'ret = re.search('w\w{2}l',str+'world')  #匹配出第一个满足条件的结果print(ret)                  #<_sre.SRE_Match object; span=(6, 10), match='worl'>print(ret.group())ret = re.findall('w\w{2}l',str)print(ret)#元字符# .     除换行符的任意一个字符# ^     匹配以某字符开始# $     匹配以某字符结束# *     重复匹配0到无穷    {0,}# +     重复匹配1到无穷    {1,}# ?     0或1个            {0,1}# {}    范围# []    字符集[a,c,e]中的一个 [0-9][a-z][A-Z]  取消 除 \ - ^ 元字符的特殊功能# |# ()# \     1.取消元字符的特殊功能  2.跟部分普通字符实现特殊功能#   \d  [0-9]#   \D  [^0-9]  非数字字符#   \s  [\t\n\f\r\v]#   \S  [^\t\n\f\r\v]#   \w  [0-9a-zA-Z]#   \W  [^0-9a-zA-Z]#   \b  单词边界 单词和空格之间的位置 特殊字符ret = re.findall('a?b','aaaaaabsdsabfffb')print(ret)ret = re.findall(r'I\b','Hello ,I am CHINESE')print(ret)ret = re.findall(r'I\b','Hello ,I am CHI$NESE')print(ret)ret = re.findall(r'I\b','Hello ,I am CHI#NESE')print(ret)# 分组ret = re.search('(?P
      \d{3})/(?P
      \w{3})','Hello 678/ESE')print(ret.group())print(ret.group('id')) #678print(ret.group('name')) #ESE# re.match与re.search的区别line = "Cats are smarter than dogs";matchObj = re.match(r'dogs', line, re.M | re.I)if matchObj: print("match --> matchObj.group() : ", matchObj.group())else: print("No match!!")matchObj = re.search(r'dogs', line, re.M | re.I)if matchObj: print("search --> matchObj.group() : ", matchObj.group())else: print("No match!!")"""No match!!search --> matchObj.group() : dogs"""#re.match()ret = re.split('[k,s]','sdasdkdssds') #分割print(ret)ret = re.sub('[k,s]','1','sdasdkdssds') #替换print(ret)phone = "2004-959-559 # 这是一个国外电话号码"# 删除字符串中的 Python注释num = re.sub(r'#.*$', "", phone)print("电话号码是: ", num)# 删除非数字(-)的字符串num = re.sub(r'\D', "", phone)print("电话号码是 : ", num)"""电话号码是: 2004-959-559 电话号码是 : 2004959559"""
  • XML 很多传统公司如金融行业的很多系统的接口还主要是xml
    • xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml 
      import xml.etree.ElementTree as ET# 自己创建xml文档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) # 打印生成的格式# 编辑xml文件tree = ET.parse("test.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')# 解析xmltree = ET.parse("test.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)

转载于:https://www.cnblogs.com/zhujingxiu/p/8311574.html

你可能感兴趣的文章
201671010437 王小倩+词频统计软件项目报告
查看>>
python中的变量,字符串,用户交互,if语句
查看>>
django的模板文件需要为utf-8无bom格式
查看>>
linux 下查看文件修改时间,访问时间,状态改变时间
查看>>
Math类函数总结
查看>>
701 C. They Are Everywhere
查看>>
D. Too Easy Problems
查看>>
HDU 1394
查看>>
poj 1321
查看>>
如何设计一个关系型数据库
查看>>
Lua string文件类型判断和内容解析
查看>>
MyBatis的动态SQL详解
查看>>
android - 多屏幕适配相关
查看>>
Fedora Linux 18 延期至年底
查看>>
Spring Framework 3.2 RC1 发布
查看>>
基于ios开发点餐系统应用(附带源码)
查看>>
Xenia and Weights(深度优先搜索)
查看>>
文件包含漏洞进阶篇
查看>>
JavaScript的self和this使用小结
查看>>
CSS3.0:透明度 Opacity
查看>>