码迷,mamicode.com
首页 > 编程语言 > 详细

python常用模块

时间:2018-07-15 19:41:06      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:重命名   系统环境   parse   号码   pil   RoCE   默认   argv   pytho   

1.time

  import time # 导入time模块

  1) time()

   获取当前时间的时间戳  

tmp = time.time()
print(tmp) # 1531456199.5435042

  2) localtime()/gmtime() 

   本地时间(东八区)/GMT时间

   获取当前时间的struct_time格式时间

   time.localtime(sec)

tmp = time.localtime()
print(type(tmp)) # <class ‘time.struct_time‘>
print(tmp) # time.struct_time(tm_year=2018, tm_mon=7, tm_mday=13, tm_hour=12, tm_min=45, tm_sec=38, tm_wday=4, tm_yday=194, tm_isdst=0)

    struct_time中的数据依次是:年、月、日、时、分钟、秒、周几、一年中的第几天、是否是夏令时(0:是,1:不是)

  3)strftime()   

             struct_time转化为字符串,

    time.strftime(format,[struct_time|tuple])

tmp = time.localtime() # struct_time
print(time.strftime(%Y-%m-%d %H:%M:%S,tmp)) # 2018-07-13 13:03:53
tmp=(2018,7,13,12,30,51,4,194,0) # tuple
print(time.strftime(%Y-%m-%d %H:%M:%S,tmp)) # 2018-07-13 12:30:51

  4) strptime()

   字符串格式转换为struct_time

     time.strptime(str,format) 

tmp = time.strptime(2018-06-06 18:01:02, %Y-%m-%d %H:%M:%S)
print(tmp) # time.struct_time(tm_year=2018, tm_mon=6, tm_mday=6, tm_hour=18, tm_min=1, tm_sec=2, tm_wday=2, tm_yday=157, tm_isdst=-1)

  5) mktime()

   将struct_time转换为时间戳

   time.mktime(struct_time)

tmp = time.strptime(2018-06-06 18:01:02, %Y-%m-%d %H:%M:%S)
a = time.mktime(tmp) 
print(a) # 1528279262.0
a = time.mktime(time.localtime())
print(a) # 1531461481.0

           技术分享图片 

2.random

  import random #加载random模块

  1) ramdom() 

    生成(0-1)中的随机数 

tmp = random.random()
print(tmp) # 0.8526857923098596

  2)randint(m,n)

    生成[m-n]中的随机数

tmp = random.randint(1,10)
print(tmp) # 10

  3)randrange(m[,n])

    生成[m,n)中的随机数

tmp = random.randrange(2)
print(tmp) # 0,1

tmp = random.randrange(0,2)
print(tmp) # 0,1

  4)shuffle(list)

    将列表中的元素随机输出

list1 = [1,2,3,4]
random.shuffle(list1)
print(list1) # [4, 2, 3, 1]

  5)choice([str|list])

    随机生成 字符串/列表 中的单个 字符/元素

# 随机生成字符串中的单个字符
tmp = random.choice(hello)
print(tmp) # ‘h‘ ,‘e‘,...
# 随机生成列表中的元素
tmp = random.choice([123,a,c])
print(tmp) # ‘123‘,‘a‘ ...

    随机生成5个字符,包括数字,大写字母,小写字母

技术分享图片
def ram_num():
    code=‘‘
    for i in range(5):
        add=str(random.choice([chr(random.randrange(97,123)),random.randrange(10),chr(random.randrange(65,91))]))
        code+=add
    print(code)

ram_num() # Xaw6l,31dy9,r4sLw
View Code

 3.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)    # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

f = open(pathtofile,a)  #windows 下创建文件

os.mknod("pathtofile") # linux下创建文件

os.remove()  # 删除一个文件

os.rename("oldname","newname")  # 重命名文件/目录

os.stat(path/filename)  # 获取文件/目录信息
info=os.stat(testfile.txt)
print(info) # os.stat_result(st_mode=33206, st_ino=44191571343580618, st_dev=1350904164, st_nlink=1, st_uid=0, st_gid=0, st_size=9, st_atime=1531467733, st_mtime=1531467733, st_ctime=1531467733)
atime=info.st_atime

os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
sw=os.sep
print(E:%skk%sstudy1 %(sw,sw))

os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

os.pathsep    输出用于分割文件路径的字符串
print(os.pathsep) # ;

os.name    输出字符串指示当前使用平台。win->nt; Linux->posix
print(os.name) # nt

os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量

os.path.abspath(相对路径)
print(os.path.abspath(./baozi.py))

os.path.dirname(文件路径名称)
print(os.path.dirname(rE:\kk\study1\baozi.py))

os.path.join(path1,"path2","path3") # 执行结果path1\path2\path3
print(os.path.join("E:\home", "me", "mywork")) # E:\home\me\mywork

4.sys

sys.platform # linux2,win32
sys.path # 返回模块的搜索路径
sys.argv[1:2] #  argv[0]是脚本名称,argv[1]是第一个参数,argv[1:2]是1-2

5.logging

  log模块级别由高到低依次为: critical -> error -> warning -> info -> debug,默认是warnning,warnning级别以下不显示信息。

logging.debug("debug  message")
logging.info("info message")
logging.warning("warnning message")
logging.error("error message")
logging.critical("critical message")

‘‘‘
WARNING:root:warnning message
ERROR:root:error message
CRITICAL:root:critical message
‘‘‘

  1.设置logging.basicConfig后,可以自定义日志输出级别,日志格式,日志输出目的

logging.basicConfig(level=logging.DEBUG,
                    format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s,
                    datefmt=%a,%d %b %Y %H:%M:%S,
                    filename=test0713.log,
                    filemode=a
                    )
logging.debug("debug  message1")
logging.info("info message1")
logging.warning("warnning message1")
logging.error("error message1")
logging.critical("critical message1")

  查看test0713.log内容:

Fri,13 Jul 2018 17:05:06 other.py[line:10] DEBUG debug  message1
Fri,13 Jul 2018 17:05:06 other.py[line:11] INFO info message1
Fri,13 Jul 2018 17:05:06 other.py[line:12] WARNING warnning message1
Fri,13 Jul 2018 17:05:06 other.py[line:13] ERROR error message1
Fri,13 Jul 2018 17:05:06 other.py[line:14] CRITICAL critical message1

  level:设置rootlogger 的日志级别 

  format:指定handler使用的日志显示格式。 

  datefmt:指定日期时间格式。  

    filename:日志会被存储在指定的文件中。

  filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。

  format参数中可能用到的格式化串:
    %(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用户输出的消息

 

   2.创建格式化后的logging模块,返回一个logger。使用logger生成日志信息。

  技术分享图片

def logger(log_type):
    #创建logger对象及日志级别
    logger = logging.getLogger(log_type)
    logger.setLevel(setting.LOG_LEVEL)

    #创建终端输出及日志级别
    ch = logging.StreamHandler()
    ch.setLevel(setting.LOG_LEVEL)

    #创建文件对象和日志级别
    log_file = "%s/log/%s" %(setting.BASE_DIR,setting.LOG_TYPES[log_type])
    fh = logging.FileHandler(log_file)
    fh.setLevel(setting.LOG_LEVEL)

    #创建日志格式
    formatter = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)

    #给ch和fh设置日志格式
    ch.setFormatter(formatter)
    fh.setFormatter(formatter)

    #添加ch和fh
    logger.addHandler(ch)
    logger.addHandler(fh)

    return logger

# logger函数目的是定义一个logger对象,这个对象可以打印相关信息
# a=logger(‘transaction‘)
# a.info(‘test file‘)

 6.configparser

  1).生成配置文件

import configparser

config=configparser.ConfigParser()
# 第一种赋值
config[DEFAULT] = {
    Name:zhangbo,
    id:2
    }
# 第二种赋值
config[ller]={}
config[ller][nb] = yes

# 第三种赋值
config[slito] = {}
slitobo = config[slito]
slitobo[next] = ok

# 写入文件
with open(example.ini,w) as f:
    config.write(f)

  执行结果

[DEFAULT]
name = zhangbo
id = 2

[ller]
nb = yes

[slito]
next = ok

  2).读取配置文件

import configparser
config=configparser.ConfigParser()
config.read(example.ini,encoding=utf-8)

  3).打印内容

print(config.sections()) #[‘ller‘, ‘slito‘] 默认不输出‘DEFAULT‘
print(config.default_section) # DEFAULT
for key in config[ller]:  
    print(key) #连带打印DEFAULT的字段 

  4).删除section

config.remove_section(ller) # 删除
config.write(open(example.ini,w)) # 保存

  5).查找section

print(config.has_section(ller)) # False
print(config.has_section(slito)) # True

  6).修改section中的内容

config.set(slito,next,NG)
config.write(open(example.ini,w))
# 文件中显示
[slito]
next = NG

7.hashlib

  将任意长度的明文加密,输出特定字符长度的密文。用于数据保护,如密码。

  hashlib中主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

  常用的MD5生成32位,SHA256生成64位

import hashlib

# 生成md5hash对象
m = hashlib.md5()
# 将任意字符生成32为固定长度密文
m.update(hello world.encode(utf8))
# 打印
print(m.hexdigest()) # 5eb63bbbe01eeed093cb22bb8f5acdc3

8.正则re

  1)re.match(patten,str,flag)

   从字符串的起始位置匹配一个字符串,没有匹配返回None.括号内的参数为。

     patten:匹配模式

     str:匹配的字符串

   标志位:用于匹配模式的方式,如忽略大小写等。

str = "Slitobo is here"
patten = is
print(re.match(patten,str)) # None
patten = ^s\w+
print(re.match(patten,str,re.I).group()) # Slitobo
# 原字符串
str = "Slitobo is here"
# 匹配模式
patten = (s\w+)\s(\w+s)\s(\w+)
# 返回一个类 <class ‘_sre.SRE_Match‘>
print(re.match(patten,str,re.I))            # <_sre.SRE_Match object; span=(0, 15), match=‘slitobo is here‘>
# .span()获取下标
print(re.match(patten,str,re.I).span())     #(0, 15)
# 打印匹配到的字符串
print(re.match(patten,str,re.I).group())    # slitobo is here
# 打印匹配到的第1/2/3个元素,以括号来区分元素位置
print(re.match(patten,str,re.I).group(1))   # slitobo
print(re.match(patten,str,re.I).group(2))   # is
print(re.match(patten,str,re.I).group(3))   # here
# 输出匹配到元素的元组
print(type(re.match(patten,str,re.I).groups())) #<class ‘tuple‘>
print(re.match(patten,str,re.I).groups())   # (‘slitobo‘, ‘is‘, ‘here‘)

  2)re.search(patten,str,flag)

   扫描整个字符串,返回匹配成功的第一个字符串。找不到返回None.

str = "Slitobo is here is"
print(re.search(is,str).group()) # is
print(re.search(is,str).span()) # (8, 10)
print(re.search(who,str)) #None

  3) re.sub(patten,repl,str,count=0)

  patten:匹配模式

  repl:替换的字符串,可以是函数(替换函数没有实现)

  str:要替换的原字符串

  count:默认是0,匹配到的全部替换。1表示只替换匹配到的第一个。

 

str = "Slitobo is here is"
ret = re.sub(e,E,str,count=0)
print(ret)  # Slitobo is hErE is
ret1 = re.sub(e,E,str,count=1)
print(ret1) # Slitobo is hEre is

  4)re.compile(patten,flag)

    编译正则表达式,将正则表达式生成一个对象。

# 生成一个patten 对象,用于匹配多个数字
patten = re.compile(\d+)
m = patten.match(hello365python)
print(m) # None
# 从下标5-10开始匹配
m = patten.match(hello365python,5,10)
print(m.group()) # 365
#匹配到的开始下标
print(m.start())    # 5
#匹配到的结束下标
print(m.end())  # 8
#匹配到的整个下标
print(m.span()) #(5,8)
patten = re.compile((\w+)\s(\w+))
m = patten.match(hello python here)
print(m.group())    # hello python
print(m.span())     # (0, 12)
print(m.group(1))   # hello
print(m.span(1))    # (0, 5)
print(m.group(2))   # python
print(m.span(2))    # (6, 12)
print(m.groups())   # (‘hello‘, ‘python‘)

  5)re.findall(pattern,str,flag)

    在字符串中查找所有匹配到的字符串,返回一个列表,没有好到返回空列表。

patten = re.compile(\d+)
ret1 = patten.findall(123 python 987 hello)
ret2 = patten.findall(run88oob123google456, 0, 10)
ret3 = patten.findall(hello python)
print(ret1) # [‘123‘, ‘987‘]
print(ret2) # [‘88‘, ‘12‘]
print(ret3) # []

  6)re.finditer(patten,str,flag)

  和findall相同,将结果作为一个迭代器返回。

patten = re.compile(\d+)
ret1 = patten.finditer(123 python 987 hello)
for i in ret1:
    print(i.group()) # 123 , 987

  7)re.split(pattern,str,maxsplit=0,flag)

  按照匹配模式进行区分,返回一个列表。

  maxsplit=0,默认值,不限制分割次数。maxsplit=1,只分割一次。

str = hello,world,iam,here
ret1 = re.split(,,str)
ret2 = re.split(,,str,maxsplit=1)
a,b,c,d=re.split(,,str)
# 用一个参数接受,返回一个列表
print(ret1) # [‘hello‘, ‘world‘, ‘iam‘, ‘here‘]
# maxsplit=1,只进行一次分割
print(ret2) # [‘hello‘, ‘world,iam,here‘]
# 用多个参数接收,返回字符串
print(a,b,c,d)  # hello world iam here

   7)正则表达式标志位flag

    7-1) re.I或者(?i)

      忽略匹配中的大小写

ret1 = re.findall((?i)yes,yes? Yes. YES!!)
ret2 = re.findall(yes,yes? Yes. YES!!,re.I)
print(ret1) # [‘yes‘, ‘Yes‘, ‘YES‘]
print(ret2) # [‘yes‘, ‘Yes‘, ‘YES‘]

    7-2)re.M或者(?m)

      多行匹配,每行作为一个对象。

ret1 = re.findall((?im)(^th[\w ]+),‘‘‘
This line is the first
anothor line
that line,it is test
‘‘‘)
ret2 = re.findall((^th[\w ]+),‘‘‘
This line is the first
anothor line
that line,it is test
‘‘‘,re.I|re.M)
print(ret1) # [‘This line is the first‘, ‘that line‘]
print(ret2) # [‘This line is the first‘, ‘that line‘]

    7-3)re.X或者(?x)

      抑制正则表达式中使用空白字符,可以使用#进行注释,简明扼要的正则表达式。

ret = re.search(‘‘‘(?x)
    \((\d{3})\) # 区号
    [ ] # 空白字符
    (\d{3})
    -   # 横线
    (\d{4}) # 终点号码
‘‘‘,(800) 555-1222).groups()
print(ret) # (‘800‘, ‘555‘, ‘1222‘)

    7-4)(?:)

      (?:后面跟正则表达式),不输出

      对部分正则表达式进行分组,但并不会保存该分组用于后面的检索和应用。相当于“只匹配,不输出”。

ret = re.findall((?im)http://(?:\w+\.)*(\w+\.com),‘‘‘
http://baidu.com
http://www.baidu.com 
http://ditu.baidu.com‘‘‘)
print(ret) # [‘baidu.com‘, ‘baidu.com‘, ‘baidu.com‘]

    7-5)(?P<name>)和(?P=name)和\g<name>

         (?P<name>)对分组取名,方便后面调用分组(?P=name)。

# 只取区号和前缀,区号是0571,前缀是7421,生成一个字典
# 如电话号码:(0571) 7421-888
ret = re.search(\((?P<areacode>\d{4})\) (?P<prefix>\d{4})-(?:\d{3}),(0571) 7421-888).groupdict()
print(ret) # {‘areacode‘: ‘0571‘, ‘prefix‘: ‘7421‘}

       (?P<name>) 定义的分组,使用\g<name>进行引用(字符串中)

# 将电话号码:(0571) 7421-888变成(0571) 7421-999
ret = re.sub(\((?P<areacode>\d{4})\) (?P<prefix>\d{4})-(?:\d{3}),(\g<areacode>) \g<prefix>-999,(0571) 7421-888)
print(ret) # (0571) 7421-999

      (?P<name>) 定义的分组,使用(?P=name)进行引用(正则中)

# 匹配(0571) 7421-888 0571-7421-888 105717421888
ret = re.search(‘‘‘(?x)
    # 匹配出(0571) 7421-888
    \((?P<areacode>\d{4})\)[ ](?P<prefix>\d{4})-(?P<number>\d{3}) 
    # 空格
    [ ]
    # 匹配出0571-7421-888
    (?P=areacode)-(?P=prefix)-(?P=number)
    # 空格
    [ ]
    # 匹配出105717421888
    1(?P=areacode)(?P=prefix)(?P=number)
‘‘‘,(0571) 7421-888 0571-7421-888 105717421888).group()
print(ret) # (0571) 7421-888 0571-7421-888 105717421888

   7-6)(?=name)

      正向前视断言,输出name前面匹配到的内容。

str = ‘‘‘
LeBron James
kobe bryant
slitobo James
Allen Iverson
‘‘‘
# 正向前视断言,将James前面的内容输出
ret = re.findall(\w+(?= James),str)
print(ret) # [‘LeBron‘, ‘slitobo‘]

    7-7) (?!name)

    反向前视断言,输出name以外的内容

str = ‘‘‘
sales@slito.com
postmaster@slito.com
eng@slito.com
noreply@slito.com
admin@slito.com
‘‘‘
#匹配以noreply或者postmaster开头的email地址后,根据匹配规则输出其他的地址
ret1 = re.findall((?m)^(?!noreply|postmaster)(\w+),str)
print(ret1) # [‘sales‘, ‘eng‘, ‘admin‘]
ret2 = re.findall((?m)^(?!noreply|postmaster)(\w+)\@(\w+\.\w+),str)
print(ret2) # [(‘sales‘, ‘slito.com‘), (‘eng‘, ‘slito.com‘), (‘admin‘, ‘slito.com‘)]

   8) 正则表达式模式字符(常用部分)

    摘自:菜鸟教程Python3正则表达式模式,http://www.runoob.com/python3/python3-reg-expressions.html

技术分享图片

 

python常用模块

标签:重命名   系统环境   parse   号码   pil   RoCE   默认   argv   pytho   

原文地址:https://www.cnblogs.com/slitobo/p/9305194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!