python模块

一. time模块

1. 三种时间表示形式

在python中,表示时间通常有三种形式:时间戳,元组表示的结构化时间,格式化的字符串时间。
(1) 时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的浮点数类型的时间差。
(2) 元组表示的结构化时间(struct_time):struct_time元组共有9个元素:(年(tm_year),月(tm_mon),日(tm_day),时(tm_hour),分(tm_min),秒(tm_sec),星期几(tm_wday),一年中第几天(tm_yday),夏令时标识符(tm_isdst))
(3) 格式化的字符串时间(Format String):提供给用户看的时间,如’2017-06-21’。

2.三种时间形式的转换

a.
这里写图片描述
(1) 时间戳<–>结构化时间

import time
time.localtime(888888888)  #localtime是当前时区时间
time.gmtime(88888888)     #gmtimes是世界标准时间(UTC)

time.mktime(time.localtime()) #将当前结构化时间转换为时间戳

(2) 字符串时间<–>结构化时间

time.strftime(‘%Y-%m-%d’,time.localtime()) #将当前结构化时间装换为字符串时间

time.strptime(‘2017-06-21’,’%Y-%m-%d’) #将’2017-06-21’转换为对应的结构化时间

b.
这里写图片描述

time.asctime(time.localtime()) #将当前结构化时间转换为固定格式的字符串时间

转换后为:’Wed Jun 21 16:33:17 2017’

time.ctime(888888888)        #将时间戳装换为固定格式的字符串时间

转换后为:’Tue Mar 3 09:34:48 1998’

3. sleep

time.sleep(2) #线程推迟2秒运行

二. random模块

import random
random.random()      # 大于0且小于1之间的随机小数

random.randint(1,5)  # 大于等于1且小于等于5之间的随机整数

random.randrange(1,3) # 大于等于1且小于3之间的随机整数

random.choice([1,'23',[4,5]])  # 从列表中随机选取一个元素

random.sample([1,'23',[4,5]],2) # 从列表中随机选取两个元素,返回它们的列表

random.uniform(1,3) #大于1小于3的随机小数

item = [1,2,3,4,5,6]
random.shuffle(item) # 打乱item的次序

三. hashlib

1. MD5

python中的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
以MD5为例:

import hashlib
md5 = hashlib.md5()
md5.update(b‘aaa’)
md5.update(b’bbb’)
print(md5.hexdigest())    # 最后返回的是b’aaabbb’调用MD5算法生成的字符串。

MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。

2. 加盐处理:

由于常用口令的MD5值很容易被计算出来,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”。

四. os模块

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下为’\r\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最后的文件名,即os.path.split(path)的第二个元素。如果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所指向的文件或目录的大小

五.sys模块

import sys
sys.argv           返回命令行参数List,第一个元素是程序本身路径
sys.exit(n)         退出程序,正常退出时exit(0)
sys.version         获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform        返回操作系统平台名称

六.logging模块

1.函数配置

默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,说明默认的日志级别为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为: 日志级别:日志级别等级:用户:输出消息。

import logging
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='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 字符串形式的当前时间。默认格式是 “2017-06-22 16:49:45,913”,逗号后面的是毫秒
%(thread)d 线程ID,可能没有
%(threadName)s 线程名,可能没有
%(process)d 进程ID,可能没有
%(message)s用户输出的消息
2.logger对象配置

import logging

logger = logging.getLogger()

fh = logging.FileHandler('test.log')  # 创建一个handler,用于写入日志文件
ch = logging.StreamHandler()  # 再创建一个handler,用于输出到控制台

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh.setFormatter(formatter)
ch.setFormatter(formatter)

logger.addHandler(fh)  #logger对象可以添加多个fh和ch对象
logger.addHandler(ch)

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')

还可以使用Filter设置过滤日志信息的方法,通过logger.setLevel(logging.Debug)设置级别,或者通过fh.setLevel(logging.Debug)单对文件设置级别。

七.序列化模块

1. 序列化的定义:

我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

2.json模块

可用json序列化的数据类型包括字符串,数字,字典,列表,元组,bool型。其中字符串,数字,字典,元组,列表经过json序列化后都变为str型,具体变化为单引号变为双引号。
True/False变为true/false,None变为null。

import json
#-----------------------------序列化
dic={'name':'alvin','age':23,'sex':'male'}
data=json.dumps(dic)

f=open('序列化对象','w')
f.write(data)       # data=json.dumps(dic) 和 f.write(data)两步等价于json.dump(dic,f)
f.close()

#-----------------------------反序列化<br>
import json
f=open('序列化对象')
new_data=json.loads(f.read())#  前两步等价于data=json.load(f)
f.close()

3.pickle模块

pickle模块用法与json一样,只是用pickle模块序列化后的数据类型为bytes,因此写入文件时用’wb’,反序列化时打开文件用’rb’。

八.configparser模块

该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。

1. 常见格式:

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes

[bitbucket.org]
User = hg

[topsecret.server.com]
Port = 50022
ForwardX11 = no

2. 通过configparser模块生成这样的文档:

import configparser

config = configparser.ConfigParser()

config["DEFAULT"] = {'ServerAliveInterval': '45',
                  'Compression': 'yes',
                 'CompressionLevel': '9',
                 'ForwardX11':'yes'
             }

config['bitbucket.org'] = {'User':'hg'}

config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}

with open('example.ini', 'w') as configfile:

config.write(configfile)

3. 查找文件

import configparser

config = configparser.ConfigParser()

#---------------------------查找文件内容,基于字典的形式

print(config.sections())        #  []

config.read('example.ini')

print(config.sections())        #   ['bitbucket.org', 'topsecret.server.com']

print('bytebong.com' in config) # False
print('bitbucket.org' in config) # True


print(config['bitbucket.org']["user"])  # hg

print(config['DEFAULT']['Compression']) #yes

print(config['topsecret.server.com']['ForwardX11'])  #no


print(config['bitbucket.org'])          #<Section: bitbucket.org>

for key in config['bitbucket.org']:     # 注意,有default会默认增加default的键
print(key)

print(config.options('bitbucket.org'))  # 同for循环,找到'bitbucket.org'下所有键
print(config.items('bitbucket.org'))    #找到'bitbucket.org'下所有键值对

print(config.get('bitbucket.org','compression')) # yes       get方法取深层嵌套的值

4. 增删改操作

import configparser

config = configparser.ConfigParser()
config.read('example.ini')  #读取’example.ini’文件到config中

config.add_section('yuan') #增加section[yuan]

config.remove_section('bitbucket.org') #删除section
config.remove_option('topsecret.server.com',"forwardx11")  #删除键值对

config.set('topsecret.server.com','k1','11111') #修改键值对,若没有则增加
config.set('yuan','k2','22222') #

config.write(open('new2.ini', "w"))  #写入文件

九.subprocess模块

当我们需要调用系统的命令的时候,最先考虑的os模块。用os.system()和os.popen()来进行操作。但是这两个命令过于简单,不能完成一些复杂的操作,如给运行的命令提供输入或者读取命令的输出,判断该命令的运行状态,管理多个命令的并行等等。这时subprocess中的Popen命令就能有效的完成我们需要的操作。
subprocess模块允许一个进程创建一个新的子进程,通过管道连接到子进程的stdin/stdout/stderr,获取子进程的返回值等操作。
subprocess模块只一个类:Popen。

1. 简单命令

Linux:
import subprocess
#创建一个新的进程,与主进程不同步,在windows下: s=subprocess.Popen('dir',shell=True)
s=subprocess.Popen('ls')    # s是Popen的一个实例对象
s.wait()                  # 等待s完成
print('ending...')     

2. 带参数的命令

Linux:
import subprocess
subprocess.Popen('ls -l',shell=True)
#subprocess.Popen(['ls','-l'])

3. 控制子进程

可以在父进程中对子进程进行其它操作:

s.poll()  #检查子进程状态
s.kill()   #终止子进程
s.send_signal()  #向子进程发送信号
s.terminate()   #终止子进程
s.pid:子进程号

4. 子进程的文本流控制

可以在Popen()建立子进程的时候改变标准输入、标准输出和标准错误,并可以利用subprocess.PIPE将多个子进程的输入和输出连接在一起,构成管道(pipe):

import subprocess
# s1 = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE)
# print(s1.stdout.read())

#s2.communicate()
s1 = subprocess.Popen(["cat","/etc/passwd"],    stdout=subprocess.PIPE)
s2 = subprocess.Popen(["grep","0:0"],stdin=s1.stdout, stdout=subprocess.PIPE)
out = s2.communicate()
print(out)

注意:communicate()是Popen对象的一个方法,该方法会阻塞父进程,直到子进程完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值