• python模块之re,os,sys。冒泡算法和反射。


    python内置模块之(os,sys,hashlib,re)

    os模块

     1 os.path.dirname()   # 获取文件的上一层目录名,其实就是os.path.split(path)的第一个元素
     2 os.path.abspath()   # 获取文件的绝对路径,包括文件名
     3 os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
     4 os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
     5 os.curdir                   返回当前目录: ('.')
     6 os.pardir                   获取当前目录的父目录字符串名:('..')
     7 os.makedirs('dir1/dir2')    可生成多层递归目录
     8 os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
     9 os.mkdir('dirname')         生成单级目录;相当于shell中mkdir dirname
    10 os.rmdir('dirname')         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    11 os.listdir('dirname')       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    12 os.remove()                 删除一个文件
    13 os.rename("oldname","new")  重命名文件/目录
    14 os.stat('path/filename')    获取文件/目录信息
    15 os.sep                      操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    16 os.linesep                  当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    17 os.pathsep                  用于分割文件路径的字符串
    18 os.name                     字符串指示当前使用平台。win->'nt'; Linux->'posix'
    19 os.system("bash command")   运行shell命令,直接显示
    20 os.environ                  获取系统环境变量
    21 os.path.split(path)         将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所指向的文件或者目录的最后修改时间
    View Code

    sys模块实现进度条

     1 import sys
     2 import time
     3 
     4 
     5 def view_bar(num, total):
     6     rate = float(num) / float(total)
     7     rate_num = int(rate * 100)
     8     r = '
    %d%%' % (rate_num, )
     9     sys.stdout.write(r)
    10     sys.stdout.flush()
    11 
    12 
    13 if __name__ == '__main__':
    14     for i in range(0, 100):
    15         time.sleep(0.1)
    16         view_bar(i, 100)
    View Code

    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.stdin          # 输入相关
    8 sys.stdout         # 输出相关
    9 sys.stderror       # 错误相关
    View Code

    hashlib模块

    1 import hashlib
    2 obj = hashlib.md5()     # 如果需要加盐,写法是:obj = hashlib.md5(bytes('asd23', encoding='utf-8'))
    3 obj.update(bytes('123', encoding='utf-8'))   #3.0版本python写法,2.0版本写法是:obj.update('123')
    4 result = obj.hexdigest()
    5 print(result)
    View Code

    模块中的特殊变量

    1 __file__            # 获取当前文件的完整路径加文件名
    2 __doc__             # 获取当前文件的文件级别注释
    3 __packege           # 获取模块文件的陌路名
    4 __name__            # 只有执行(不是被导入的)当前文件时,特殊变量name才等于main,否则不等于.

    re模块

    这个模块提供了与 Perl 相似l的正则表达式匹配操作。Unicode字符串也同样适用。

    正则表达式使用反斜杠" "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\ "表示正则表达式中的" ",因为正则表达式中如果要匹配" ",需要用来转义,变成" \ ",而Python语法中又需要对字符串中每一个进行转义,所以就变成了" \\ "。

    上面的写法是不是觉得很麻烦,为了使正则表达式具有更好的可读性,Python特别设计了原始字符串(raw string),需要提醒你的是,在写文件路径的时候就不要使用raw string了,这里存在陷阱。raw string就是用'r'作为字符串的前缀,如 r" ":表示两个字符""和"n",而不是换行符了。Python中写正则表达式时推荐使用这种形式。

    绝大多数正则表达式操作与 模块级函数或RegexObject方法 一样都能达到同样的目的。而且不需要你一开始就编译正则表达式对象,但是不能使用一些实用的微调参数。

    正则表达式元字符:

     1 . 除换行符以外的任意一个字符
     2 ^ 锚定行首,以什么字符(串)开头,如果^在中括号中,那么表示非的意思
     3 & 锚定行首,以什么字符(串)结尾
     4 * 重复匹配,可以重复0-多次
     5 + 重复匹配,可以重复1-多次,最少有一个
     6 ? 重复匹配,可以重复0-1次
     7 {} 重复匹配,可以指定重复的次数,{1,5}或{3}.重复至少1次,最多5次或重复3次
     8 [] 指定匹配范围,[a-z],表示a到z的任意字符,其他元字符在中括号中仅表示普通字符,除了-
     9 () 分组匹配,匹配被括号起来的一组字符,小括号在re模块的大部分方法中还表示,在已经匹配到的数据中再去匹配,比如match,findall,search
    10  转义,后面跟元字符取消元字符的特殊意义,后面跟普通字符实现特殊功能
    11 d  任意十进制数字
    12 D  任意任何非数字字符
    13 s  匹配任何空白字符
    14 S  匹配任何非空白字符
    15 w 匹配任何字符数字字符
    16 W 匹配任何非字符数字字符
    17  匹配一个单词边界,也就是指单词和空格之间的位置

    findall(查找字符串中所有匹配到的字符串,返回一个列表):

    1 import re
    2 result = re.findall('gouyc', 'gouyc123asdagouycfsdf')
    3 print(result)

    finditer(查找字符串中所有匹配到的字符串,从左到右匹配.返回一个迭代器,如果没有匹配到,返回空列表):

    1 it = re.finditer(r'(gouyc)', 'gouycasddf12gouyc3123')
    2 for i in it:
    3     print(i.group())

    match:

    1 import re
    2 re.match(r'gouyc', 'asdhgouyc').group()

    注意:

    • match,只匹配字符串的起始位置,后面的不找
    • 返回一个对象,通过对象的group()方法获取匹配到的内容
    • r表示原生字符串,去掉string中特殊字符串的意义.

    search:

    1 import re
    2 
    3 re.search('yacai', 'yacai23laflyacai32njsdfj', flags=0)
     search,匹配字符串中的所有位置,匹配到一个结果后停止.未匹配成功返回None
    返回一个对象,通过对象的group()方法获取匹配到的内容


    sub(查找替换):
    1 re.sub(partten,repl,string,max=0)

    group(用来获取findall,match,search返回的对象中的数据)

    groups(用来获取findall,match,search返回的对象中的数据,以元祖的形式返回)

    groupdict(用字典的方式返回findall,match,search返回的对象中的数据,需要在partten中指定key)

    1 import re
    2 re.match('h(?P<name>w+)', has hjksahk12332).groupdict

    subn(不光替换,最后会统计替换的次数返回给我们)

    split(以指定模式分割字符串,返回列表)

    1 import re
    2 re.split(1, 'one1two2three3four4')

    compile(将模式编译成一个对象,通过对象的findall方法来查找)

    1 import re
    2 regex = re.compile(r'w*oo')
    3 regex.findall('string')

    反射

    利用字符串的形式去对象(模块)中操作(查找,检查,调用)其成员,就叫做反射
     1 import commons
     2 
     3 if __name__ == '__main__':
     4     inp = input('请输入url: ')
     5     if hasattr(commons, inp):  # 以字符串的形式去对象中检查属性,如果有返回True,否则返回False
     6         url = getattr(commons, inp) # 以字符串的形式去对象中寻找属性,有则获取属性,否则报对象中没有属性的错误
     7         url() # 执行getattr获取的属性
     8     else:
     9         print('404')
    10 
    11 进阶版本
    12 if __name__ == '__main__':
    13     inp = input('请输入url: ')
    14     m, f = inp.split('/')
    15     obj = __import__(m)         # 根据字符串去导入模块
    16     if hasattr(obj, f):
    17         url = getattr(obj, f)
    18         url()
    19     else:
    20         print('404')
    View Code

    注意:如果模块在其他目录下,那么使用__import__()的时候,需要加一个参数,fromlist=True.否则,将只能找到目录,找不到目录下的模块.

    递归(如果函数包含了对其自身的调用,该函数就是递归的):

    递归实现阶乘

    1 def func(num):
    2     if num == 1:
    3         return 1
    4     return num * func(num - 1)
    5 
    6 print(func(5))

    Python冒泡排序算法的运作如下:

      1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
      2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
      3.针对所有的元素重复以上的步骤,除了最后一个。
      4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    冒泡算法排序

    1 array = [1,2,3,6,5,4]
    2 for i in range(len(array)):
    3     for j in range(i):
    4         if array[j] > array[j + 1]:
    5             array[j], array[j + 1] = array[j + 1], array[j]
    6 print array
  • 相关阅读:
    自定义ProgressBar
    Anroid开发中常用快捷键
    Intent用法
    IO(Input Output)流
    自定义Dialog
    仿UC点击两次返回键退出程序
    横竖屏切换时Activity的生命周期
    单例模式
    Timer用法
    关于数组
  • 原文地址:https://www.cnblogs.com/gouyc/p/5594435.html
Copyright © 2020-2023  润新知