Loading

python 模块

模块

一.os

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.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不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小

二.logging模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import logging
 
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(lineno)d %(levelname)s %(message)s',
                    datefmt='%Y-%m-%d %X',
                    filename='log.txt',
                    filemode='w')
 
 
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
 1 logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
 2 
 3 filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
 4 filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
 5 format:指定handler使用的日志显示格式。
 6 datefmt:指定日期时间格式。
 7 level:设置rootlogger(后边会讲解具体概念)的日志级别
 8 stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
 9 
10 format参数中可能用到的格式化串:
11 %(name)s Logger的名字
12 %(levelno)s 数字形式的日志级别
13 %(levelname)s 文本形式的日志级别
14 %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
15 %(filename)s 调用日志输出函数的模块的文件名
16 %(module)s 调用日志输出函数的模块名
17 %(funcName)s 调用日志输出函数的函数名
18 %(lineno)d 调用日志输出函数的语句所在的代码行
19 %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
20 %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
21 %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
22 %(thread)d 线程ID。可能没有
23 %(threadName)s 线程名。可能没有
24 %(process)d 进程ID。可能没有
25 %(message)s用户输出的消息
26 
27 配置参数
配置参数

 

logger对象配置

def logger():
    logger = logging.getLogger()
    # 创建一个handler,用于写入日志文件
    fh = logging.FileHandler('test.log')
 
    # 再创建一个handler,用于输出到控制台
    ch = logging.StreamHandler()
 
    formatter = logging.Formatter('%(asctime)s %(lineno)d %(levelname)s %(message)s')
 
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
 
    logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
    logger.addHandler(ch)
    return logger
 
logger=logger()
 
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')

 

一、re

#字符匹配(普通字符,元字符)
#普通字符
#元字符
 .    ^    $   *   ?    +   {}   []    |    ()      \
    \:   反斜杠后边跟元字符去除特殊功能
          反斜杠后边跟普通字符实现特殊功能
          引用序号对应的字组所匹配的字符串
     
    \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   匹配一个单词边界,也就是指单词和空格间的位置
 1 origin = "hello world hi"
 2 
 3 r = re.match("h\w+",origin)
 4 print(r.group())           #获取匹配到的所有结果
 5     hello
 6     
 7 r = re.match("(h)(\w+)",origin)
 8 print(r.groups())          #获取模型中匹配到的分组结果
 9     ('h', 'ello')
10     
11 r = re.match("(?P<n1>h)(?P<n2>\w+)",origin)
12     {'n1': 'h', 'n2': 'ello'}
13 
14 re.match #从头匹配
re.match #从头匹配
 1 origin = "hello alex alex bcd abcd lge acd 19"
 2 
 3 r = re.finditer("(a)((\w+)(e))(?P<n1>x)",origin)
 4 for i in r:
 5     print(i)
 6         <_sre.SRE_Match object; span=(6, 10), match='alex'>
 7     print(i.group())
 8         alex
 9     print(i.groupdict())
10         {'n1': 'x'}
11 
12 re.finditer
re.finditer
 1 import re
 2 
 3 origin = "hello alex hello alex bcd abcd lge acd 19"
 4 
 5 
 6 # .
 7 
 8 print(re.findall("h...o",origin))
 9     ['hello', 'hello']
10 
11 
12 # ^
13 
14 print(re.findall("^h...o",origin))
15     ['hello']
16 
17 # $
18 
19 print(re.findall("h...o$",origin))
20     []
21 
22 # ?
23 
24 print(re.findall("d?","aaaddddccc"))
25     ['', '', '', 'd', 'd', 'd', 'd', '', '', '', '']
26 
27 # +
28 
29 print(re.findall("d+","aaaddddccc"))
30     ['dddd']
31 
32 # *
33 
34 print(re.findall("d*","aaaddddccc"))
35     ['', '', '', 'dddd', '', '', '', '']
36 
37 # {}
38 
39 print(re.findall("d{4}","aaaddddccc"))
40     ['dddd']
41 
42 #注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
43 print(re.findall("ad*?","addddccc"))
44     ['a']
45 
46 print(re.findall("ad*?","aaaaddddccc"))
47     ['a', 'a', 'a', 'a']
48 
49 
50 # []    []里面只有 ^ - \ 有特殊含义
51 
52 
53 print(re.findall("a[bc]d","abdfffacd"))
54     ['abd', 'acd']
55 
56 print(re.findall("q[a-z]","qab"))
57     ['qa']
58 
59 print(re.findall("q[^a-z]*","q12355"))
60     ['q12355']
61 
62 
63 #匹配括号中没有括号
64 print(re.findall("\([^()]*\)","12+(34*6+2-5*(2-1))"))
65     ['(2-1)']
66 
67 re.findall #将匹配到的内容放到一个列表里
re.findall #将匹配到的内容放到一个列表里
 1 # search ()
 2 
 3 print(re.search("(?P<name>[a-z]+)","alex36wusir34egon33").group())
 4     alex
 5 
 6 print(re.search("(?P<name>[a-z]+)\d+","alex36wusir34egon33").group())
 7     alex36
 8 
 9 print(re.search("(?P<name>[a-z]+)\d+","alex36wusir34egon33").group("name"))
10     alex
11 
12 print(re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36wusir34egon33").group("age"))
13 
14 re.search
re.search
 1 #split 切割
 2 
 3 print(re.split(" ","alex egon hao"))
 4     ['alex', 'egon', 'hao']
 5 
 6 print(re.split("[ |]","alex egon|hao"))
 7     ['alex', 'egon', 'hao']
 8 
 9 print(re.split("[ab]","abc"))
10     ['', '', 'c']
11 
12 print(re.split("[ab]","asdabcd"))
13     ['', 'sd', '', 'cd']
14 
15 re.split 切割
re.split 切割
 1 #sub 替换
 2 
 3 #将数字替换成A
 4 print(re.sub("\d+","A","aakk123ddd55kk66"))
 5     aakkAdddAkkA
 6 
 7 #匹配前4次
 8 print(re.sub("\d","A","aakk123ddd55kk66",4))
 9     aakkAAAdddA5kk66
10 
11 
12 #subn 替换的次数按元组显示出来
13 
14 print(re.subn("\d","A","aakk123ddd55kk66"))
15     ('aakkAAAdddAAkkAA', 7)
16 
17 #sub 替换
#sub 替换
 1 # () 优先显示括号中的内容
 2 
 3 print(re.findall("\([^()]*\)","12+(34*6+2-5*(2-1))"))
 4     ['(2-1)']
 5 
 6 print(re.findall("www\.(baidu|163)\.com","www.baidu.com"))
 7     ['baidu']
 8 
 9 print(re.findall("www\.(?:baidu|163)\.com","www.baidu.com"))
10     ['www.baidu.com']
11 
12 print(re.findall("(abc)+","abcabcabc"))
13 ['abc']
14 
15 print(re.findall("(?:abc)+","abcabcabc"))
16     ['abcabcabc']
17 
18 () 优先显示括号中的内容
() 优先显示括号中的内容

 

海峰 

苑昊 

武沛齐

 
posted @ 2017-06-27 23:24  Meet~  阅读(258)  评论(0编辑  收藏  举报