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
原文地址:https://www.cnblogs.com/gouyc/p/5594435.html