常用模块
一、时间模块(time):
在Python中,通常有三种方式来表示:时间戳、元组、格式化的时间字符串
三种表达方式:
第一种:时间戳:表现形式是一种字符串形式
- 时间戳
>>import time
>>time.time()
>>1498028767.970267 #时间戳的表示是从1970年1月1日00:00:00开始按秒计算的偏移量
- 时间字符串
>>> time.strftime("%Y-%m-%d %X")
'2017-06-21 03:12:15'
- 时间元组又称结构化时间
>>> time.localtime() #如果没有指定时间默认会结构化当前的时间
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=21, tm_hour=3, tm_min=13, tm_sec=8, tm_wday=2, tm_yday=172, tm_isdst=1)
>>> c=time.localtime()
>>> c.tm_year
2017
这里以元组的形式输出,共有9个元素:(年,月,日,分,秒,一年中的第几周,一年中的第几天等)
三种时间是的类型:时间戳是给到计算机计算的,而字符串是给到用户看得
二、随机模块(random):
>>> import random
>>> random.random()
0.6394147761575729 #没有指定范围默认为0-1的范围的浮点型
- random.randint() #整数型随机数
>>> random.randint(1,4)
2
>>> random.randint(1,4)
3
>>> random.randint(1,4)
3
>>> random.randint(1,4)
4
- random.choice() #指定随机元素
>>> random.choice([1,4,3,"fs"])
'fs'
>>> random.choice([1,4,3,"fs"])
3
>>> random.choice([1,4,3,"fs"])
'fs'
>>> random.choice([1,4,3,"fs"])
4
>>> (random.choice([1,4,3,"fs"]),2)
(3, 2)
>>> (random.choice([1,4,3,"fs"]),2)
(4, 2)
- random.shuffle() #打乱次序
>>> item=[1,2,3,44,21,9]
>>> random.shuffle(item)
>>> print(item)
[1, 21, 3, 2, 44, 9]
>>> print(item)
[1, 21, 3, 2, 44, 9]
三、hashlib模块
hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. 另外,模块中所定义的 new(name, string=”) 方法可通过指定系统所支持的hash算法来构造相应的hash对象.
- 单类摘要转换
import hashlib
m=hashlib.md5()
m.update("hello".encode("utf-8")) 将摘要的字符串存在于m中
print(m.hexdigest()) #将m中摘要的字符(”hello“)#转化为16进制的密文
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
5d41402abc4b2a76b9719d911017c592
Process finished with exit code 0
- 多类摘要转换
import hashlib
m=hashlib.md5()
m.update("hello".encode("utf-8"))
m.update("world".encode("utf-8"))
print(m.hexdigest()) #这里得出的结果是将“helloworld"进行转换
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
fc5e038d38a57032085441e7fe7010b0
Process finished with exit code 0
四、os模块
os模块:与操作系统交互的一个接口
- os.getcwd() #查看当前目录的绝对路径
import os
print(os.getcwd())
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
E:py_codeday 7
Process finished with exit code 0
- os.chdir() #切换工作目录
os.chdir(r"E:py_codeday 8") #切换工作目录到指定目录下
open("text.txt",'w') #因为已经切换了目录所以这里的创建的一个文件会在切换的目录下
print(os.getcwd())
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
E:py_codeday 8
Process finished with exit code 0
- makedirs()
os.makedirs("tesy/bash") #递归创建先创建tesy然后在其下面在创建bash
- removedirs()
os.removedirs("tesy/bash") #递归删除,但先判断文件是否为空在进行删除
- listdir()
import os
print(os.listdir("E:py_codeday 6")) #将指定目录下的文件以列表的形式输出
- os.rename()
import os
print(os.rename("a.txt","c.txt"))
- os.stat()
import os
print(os.stat(r"E:py_codeday 7.txt"))
下面是输出的结果:
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
os.stat_result(st_mode=33206, st_ino=8444249301326323, st_dev=18467, st_nlink=1, st_uid=0, st_gid=0, st_size=68, st_atime=1497602601, st_mtime=1497602601, st_ctime=1497602543)
Process finished with exit code 0
解释:
st_ctime=1497602543:创建时间
st_mtime=1497602601:修改时间
st_atime=1497602601:访问时间
st_size=68:文件大小(字节)
- os.name
import os
print(os.name) #显示当前的系统平台win-->输出“nt” Linux-->输出“posix”
- os.system() #运行shell命令,直接显示
import os
print(os.system("dir"))
- os.path.abspath #显示指定文件的绝对路径
import os
print(os.path.abspath("b.txt"))
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
E:py_codeday 7.txt
Process finished with exit code 0
- os.path.basename():取文件基名;os.path.dirname():取文件目录路径
import os
res=os.path.abspath("b.txt")
print(os.path.basename(res))
print(os.path.dirname(res))
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
b.txt
E:py_codeday 7
Process finished with exit code 0
- os.path.join() #拼接
import os
s1=r"E:py_code"
s2=r"day 3"
s=os.path.join(s1,s2)
print(s)
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
E:py_codeday 3
Process finished with exit code 0
五、sys模块
- sys.version() #查看当前解释器的版本
import sys
print(sys.version)
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
Process finished with exit code 0
- sys.platform() #查看当前的操作系统版本
import sys
print(sys.platform)
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
win32
Process finished with exit code 0
- sys.argv #是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始
import sys
print(sys.argv)
username=sys.argv[1] --->li
password=sys.argv[2] --->4324225
E:py_codeday 7>python 生成器.py li 4324225
['生成器.py', 'li', '4324225']
- sys.path
import sys
print(sys.path)
输出结果:
['E:\py_code\day 7', 'E:\py_code', 'D:\Program Files\python36.zip', 'D:\Program Files\DLLs', 'D:\Program Files\lib', 'D:\Program Files', 'D:\Program Files\lib\site-packages']
六、logging模块
默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。
import logging
logging.debug("debug")
logging.info("info")
logging.warning("warning") #默认等级显示的等级,大于该等级的才会打印,小于该等级则不予显示
logging.error("error")
logging.critical("critical")
上述的显示效果是可以通过配置文件进行修改的:
cogfig:
import logging
logging.basicConfig(level=logging.warning(设定显示等级),
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S'(即format中的asctime的时间格式),
filename='/tmp/test.log'(将输出指定到文件中),
filemode='w')
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
下面是配置参数
logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
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用户输出的消息
logger:
import logging
logger=logging.getLogger() #生成一个对象
fh=logging.FileHandler("log.txt") #创建一个文件的输出流指定文件名
fh.setLevel(logging.DEBUG) #指定等级
sh=logging.StreamHandler() #创建一个屏幕的输出流
logger.addHandler(sh) #添加文件输出到指定文件中
logger.addHandler(fh) #添加屏幕的输出流
fm=logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") #修改输出流的格式并赋值给到fm方便调用
fh.setFormatter(fm) #调用输出流的格式给到文件输出流,运行后日志文件的输出格式将按fm的格式进行输出
logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")
七、序列化模块
- 第一种dumps的转化方式:
import json
d={"name":"keny"}
s=json.dumps(d) #将字典d转化为json字符串--->序列化
f=open("new","w")
f.write(s) #将转化为json的字符串s写入文件中
f.close()
f2=open("new")
data=f2.read()
data=json.loads(data) #将new文件中的json字符串反序列读取出来
print(data,type(data))
输出:
"D:Program Filespython.exe" "E:/py_code/day 7/生成器.py"
{'name': 'keny'} <class 'dict'> #输出的格式按保存的格式进行输出
Process finished with exit code 0
- 第二种dump的转化方式:
import json
d={"name":"keny"}
f=open("new2",'w')
json.dump(d,f) #1.将d转成json字符串;2.将json字符串写入f中
f.close()
f2=open("new2")
data=f2.read()
data=json.loads(data) #将new文件中的json字符串反序列读取出来
print(data,type(data))