菜单

Python常用模块

2019年4月1日 - 金沙编程资讯
postdata = '''{'userName':'13718651996',
            'passwd':'yhlxxxx870120',
            'validateCode':'abc',
            'rememberMe':'true'}'''
url = 'https://secure.elong.com/passport/ajax/elongLogin'
request = Session().post(url,data=eval(postdata))
print(request.json())

random模块

import random

print(random.random())#(0,1)----float    大于0且小于1之间的小数

print(random.randint(1,3))  #[1,3]    大于等于1且小于等于3之间的整数

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

print(random.choice([1,'23',[4,5]]))# 1或者23或者[4,5] 随机选取

print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合

print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716 


item=[1,3,5,7,9]
random.shuffle(item) #打乱item的顺序,相当于"洗牌"
print(item)

变化随机验证码:

import random
def make_code(n):
    res=''
    for i in range(n):
        s1=chr(random.randint(65,90))
        s2=str(random.randint(0,9))
        res+=random.choice([s1,s2])
    return res

print(make_code(4))

简介:

模块:用一坨代码完成了有个别意义的代码集合。分为二种:

configparser模块:  (打开,读取特定格式的文件)(暗中同意文件都以字符串)

图片 1

 

 图片 2

 

荒谬输出输出:

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() 删除3个文本
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的大小

os.path.normcase()此函数在Linux和mac平台上,该函数会原样返回path,在windows平台上会将路径中的全部字符转换为小写的款式,并将斜转换为反斜杠:

# Linux 平台:
>>> import os
>>> os.path.normcase('c:/windows\\system32\\')
'c:/windows\\system32\\'

# Windows平台:
>>> import os
>>> os.path.normcase('c:/windows\\system32\\')
'c:\\windows\\system32\\'

使用.. 可以代表上超级目录。对目录举行格式化:

#Windows 平台:
>>> os.path.normpath('c://windows\\System\\../Temp/')
'c:\\windows\\Temp'

# Linux 平台:
>>> os.path.normpath('/etc/system/sysconfig/\\\\network/\\\ifconfig/../..')
'/etc/system/sysconfig'

收获文件目录的三种办法(有微微层,就使用多少次os.path.dirname):

方式一:
>>> os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath('/etc/sysconfig/network-scripts/ifcfg-eth0'))))
'/etc'

方式二: os.pardir想当与  ..    sys.path是一个目录列表.使用insert(0,..)的方式可以优先将目录加入到列表的最前面.
>>> topdir = os.path.normpath(os.path.join(os.path.abspath('/etc/sysconfig/network-scripts/ifcfg-eth0'),os.pardir,os.pardir,os.pardir))
>>> print(topdir)
/etc
>>> sys.path.insert(0,topdir)

os模块(和系统有关)

os.stat(“path“)  获取文件目录消息

图片 3

os.path.dirname(path)  获取文件所在的目录

图片 4

os.path.exists(path)  假如path存在则赶回true,不然重临false

图片 5

os.path.join(path1[,path2[,…]])  将多少个路子组合后归来,第四个相对路径此前的参数将被忽视

图片 6

 

python去找模块的路子

图片 7

当中,第①方模块安装的职位

图片 8

晋升:第叁方模块名无法和松手以及第③方模块重名

导入模块:from lib.account import login

 

贰 、join拼接路径

hashlib模块

hash:一种算法 ,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224,
SHA256, SHA384, SHA512 ,MD5 算法
哈希算法的特征:
1.内容千篇一律则hash运算结果一律,内容有点改变则hash值则变
2.不可逆推
3.如出一辙算法:无论校验多少长度的数目,得到的哈希值长度固定。

对数码实行校验:

import hashlib
# 相同的内容校验结果一样
n=hashlib.md5('helloworld'.encode('utf-8'))   # 
print(n.hexdigest())

m=hashlib.md5('hello'.encode('utf-8'))
m.update('world'.encode('utf-8'))
print(m.hexdigest())

输出:

fc5e038d38a57032085441e7fe7010b0
fc5e038d38a57032085441e7fe7010b0

对文件举行校验:

import hashlib
m=hashlib.md5()
with open('my.cnf','rb') as f:
    for line in f:
        m.update(line)
print(m.hexdigest())

# 文件较大时不推荐使用一次读取文件的方式
m=hashlib.md5()
with open('my.cnf','rb') as f:
    m.update(f.read())
print(m.hexdigest())

在做加密算法时,通过撞库能够反解密码,所以一般对加密算法添加salt实行加密:

# 加盐处理
password='123456'
m=hashlib.md5('add salt code str'.encode('utf-8'))
m.update(password.encode('utf-8'))
print(m.hexdigest())

# 实际的处理字符串
n=hashlib.md5('add salt code str123456'.encode('utf-8'))
print(n.hexdigest())

输出的结果同样:

b7709cddef6897748d66663afdb5a003
b7709cddef6897748d66663afdb5a003


hashlib模块类似的还有3个hmac模块,这么些模块用法和hashlib一样,然而必须确认保证第三个字符一样,才能校验出同样的结果:

import hmac

h=hmac.new('hello'.encode('utf-8'))
h.update('world'.encode('utf-8'))
print(h.hexdigest())

k=hmac.new('hello'.encode('utf-8'))
k.update('wor'.encode('utf-8'))
k.update('ld'.encode('utf-8'))
print(k.hexdigest())

# 这里输出和上面两种结果不一致
g=hmac.new('hell'.encode('utf-8'))
g.update('oworld'.encode('utf-8'))
print(g.hexdigest())

输出:

0e2564b7e100f034341ea477c23f283b
0e2564b7e100f034341ea477c23f283b
e705e80d60a2e0851a23dcd1773099ab

内置的模块

图片 9

__doc__   是py文件的评释

图片 10

__file__  #文本自己的门道

图片 11

__package__  当前py文件在哪个文件夹下,借使四个途径用.连接

__cached__  做缓存用的

__name__  (重要)

__name__ == ‘__main__’的应用:

主文件: 调用函数前,必须加__name__ == ‘__main__’

 

json类别化  (Json正是字符串)

json.loads  用于将列表、字典、元组格局的字符串,转换为相应的字典,列表,元组(注意报错,格式)

图片 12

图片 13

在意上海体育场所的格式,报错。

json.dumps()  将得到的字典、列表,元组转换为相应的字符串

图片 14

json.dump()  获得剧情再写入相应的文书内

 

subprocess模块

图片 15

 

logging模块(首要)  (用于便捷记录日志且线程安全的模块)

图片 16

图片 17

图片 18

图片 19

图片 20

 

如上海教室代码若是实施报如下错误:

json&pickle模块

把指标(变量)从内部存储器中变为可存款和储蓄或传输的经过称之为系列化,在Python中叫pickling.

import  json
dic = {'name': 'alvin', 'age': 23, 'sex': 'male'}
print(type(dic))

j=json.dumps(dic)
print(type(j))
print(j)

输出:
<class ‘dict’>
<class ‘str’>
{“name”: “alvin”, “age”: 23, “sex”: “male”}

动用json.loads()方式得以将适合json格式的多少开始展览连串化:

# 读取json.txt的文件内容为:{"name": "alvin", "age": 23, "sex": "male"}
import  json
with open('json.txt','r') as f2:
    data=json.loads(f2.read())
    print(type(data))
    print(data)

输出:
<class ‘dict’>
{‘name’: ‘alvin’, ‘age’: 23, ‘sex’: ‘male’}

import pickle
def func():
    print('this is func')    
j=pickle.dumps(func)
print(j)

输出的是bytes类型:
b’\x80\x03c__main__\nfunc\nq\x00.’

反种类化:

import pickle
f=open('序列化对象_pickle','rb')
data=pickle.loads(f.read())  #  等价于data=pickle.load(f)
print(data['age'])   

configparser模块:  (打开,读取特定格式的公文)(私下认可文件都以字符串)

图片 21

 

 图片 22

 

添加sys.path路径:

图片 23

 

壹 、在行使requests发送请求,响应数据转成json指示,没有可解码的json

sys模块

sys.argv 命令行参数List,第二个成分是先后自个儿路径
sys.exit(n) 退出程序,平常退出时exit(0)
sys.version 获取Python解释程序的版本新闻
sys.maxint 最大的Int值
sys.path 再次来到模块的探寻路径,开始化时选取PYTHONPATH环境变量的值
sys.platform 重返操作系统平台名称

打字与印刷进程条的以身作则:

>>> print('[%-20s]' %'##')
[##                  ]
# -20 表示宽度,[%-20s]是固定写法,后面引用字符变量 %'##'

'\r' 表示跳到行首打印

#=========实现打印进度条函数==========
import sys
import time

def progress(percent,width=50):
    if percent >= 1:
        percent=1
    show_str=('[%%-%ds]' %width) %(int(width*percent)*'#')
    print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='')

 hashlib模块:  (加密相关操作)

用户名,密码保存的时候必须加密

md5加密是不可能反解的。

图片 24

因为各种电脑上的md5加密出来的数额都以一律的,所以会被人家拿走加密对应的用户名,密码。所以要团结再定制,使md5加密出来的数据只设有本身的微型总括机上。

图片 25

加密报到注册实例:

图片 26

 

 图片 27

 

os模块(和类别有关)

os.stat(“path“)  获取文件目录音信

图片 28

os.path.dirname(path)  获取文件所在的目录

图片 29

os.path.exists(path)  即使path存在则赶回true,不然再次来到false

图片 30

os.path.join(path1[,path2[,…]])  将多个路子组合后回到,第三个相对路径在此以前的参数将被忽视

图片 31

 

那是出于,发送请求的多寡,存在不当,响应出错比如404
400,所以找不到能够解码的json

Time 模块

时刻模块常用的有如下二种。

import time
print(time.time())  # 1513319911.3789327 1970年到当前的总时间s。
print(time.strftime('%Y-%m-%d %X')) # 2017-12-15 14:38:31

元组情势体现时间:

print(time.localtime())
# time.struct_time(tm_year=2017, tm_mon=12, tm_mday=15, tm_hour=14, tm_min=53, tm_sec=39, tm_wday=4, tm_yday=349, tm_isdst=0)

print(time.localtime().tm_mon) # 12

UTC时间:

print(time.gmtime())

将格式化的时刻转移为元组格局的时日:

print(time.localtime(3243543544))
print(time.gmtime(3243543544))

时刻转移:

print(time.ctime(12334454))
print(time.asctime(time.gmtime()))

Sun May 24 02:14:14 1970
Fri Dec 15 07:38:07 2017

python去找模块的门路

图片 32

内部,第壹方模块安装的地方

图片 33

提醒:第②方模块名不可能和停放以及第2方模块重名

导入模块:from lib.account import login

 

shutil模块(高级文件、文件夹、压缩包处理模块)

图片 34

图片 35

图片 36

 

毋庸置疑代码:

shelve模块

shelve模块和pickle功用类似,不过比pickle模块简单,只有二个open函数,重回类似字典的靶子,可读可写;key必须为字符串,而值能够是python所支撑的数据类型。

import shelve

f=shelve.open(r'sheve.txt')
# f['stu1_info']={'name':'egon','age':18,'hobby':['piao','smoking','drinking']}
# f['stu2_info']={'name':'gangdan','age':53}
# f['school_info']={'website':'http://www.pypy.org','city':'beijing'}

print(f['stu1_info']['hobby'])
f.close()

shutil模块(高级文件、文件夹、压缩包处理模块)

图片 37

图片 38

图片 39

 

简介:

模块:用一坨代码完毕了有些效用的代码集合。分为三种:

示范如下:

xml模块

xml是先后之间实行数量交互的磋商,在多少应用中还会动用XML协议。xml和json类似,也是跨平台,xml协议在依次语言中都以永葆的。
xml文件是一个树形结构的数量,python 的xml模块帮忙对xml文件的操作。
xml分为七个部分:标签(tag),属性(attrib),内容(text)。标签一般有多级标签。

# 获取xml的根标签
import xml.etree.ElementTree as ET

tree = ET.parse("xmltest.xml")
root = tree.getroot()
print(root.tag)

#遍历xml文档, 使用多层循环,获取多层数据
for child in root:
    print('========>',child.tag,child.attrib,child.attrib['name'])
    for i in child:
        print(i.tag,i.attrib,i.text)

#只遍历year 节点
for node in root.iter('year'):  # root.iter()表示从根节点开始扫描整个xml
    print(node.tag,node.text)

#修改
for node in root.iter('year'):
    new_year=int(node.text)+1
    node.text=str(new_year)
    node.set('updated','yes')   # tag.set用于设置属性
    node.set('version','1.0')
tree.write('test.xml')

#删除node
for country in root.findall('country'): #  tag.findall 只查找tag的下一层。 tag.find只查找tag下一层的一个符合数据。
   rank = int(country.find('rank').text)
   if rank > 50:
       root.remove(country)
tree.write('output.xml')

在country内添加(append)节点year2

import xml.etree.ElementTree as ET

tree = ET.parse("a.xml")
root=tree.getroot()
for country in root.findall('country'):    # 使用两层for循环遍历整个标签下的数据
    for year in country.findall('year'):  
        if int(year.text) > 2000:               #  标签.text 用于指定标签对应的数据项
            year2=ET.Element('year2')     #
            year2.text='新年'
            year2.attrib={'update':'yes'}
            country.append(year2) # 往country节点下添加子节点

tree.write('a.xml.swap')

subprocess模块

图片 40

 

logging模块(主要)  (用于便捷记录日志且线程安全的模块)

图片 41

图片 42

图片 43

图片 44

图片 45

 

 hashlib模块:  (加密有关操作)

用户名,密码保存的时候必须加密

md5加密是不得以反解的。

图片 46

因为每一种电脑上的md5加密出来的数据都以平等的,所以会被旁人取得加密相应的用户名,密码。所以要协调再定制,使md5加密出来的数额只存在本人的电脑上。

图片 47

加密登录注册实例:

图片 48

 

 图片 49

 

图片 50

configparser 模块

在运用mysql或许openstack的配备文件中,日常能够看到如下的布置文件格式:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

采纳configparser能够很便利的读写配置消息的内容.

import configparser

config=configparser.ConfigParser()
config.read('my.cnf')
print(config.sections())   # 查看标题
print(config.options(config.sections()[0])) # 查看某个标题下的配置项
print(config.get('mysqld','socket')) # 查看某个标题下的某个配置项的值

输出:

['mysqld', 'mysqld_safe']
['datadir', 'socket', 'symbolic-links']
/var/lib/mysql/mysql.sock

若果得到的值中蕴藏数字和布尔值,能够采取get的法子一直转换为相应的品类。

res1=config.getint('title','conf_option')
res2=config.getfloat('title','conf_option')
res3=config.getboolean('title','conf_option')

修改配置:

config.remove_section('mysqld') # 删除整个标题区域
config.remove_option('mysqld_safe','log-error') # 删除指定title的配置项
config.write(open('my.cnf','w'))  # 写入文件

添加布署:

config.add_section('client')   # 添加一个标题
config.set('client','socket','/var/run/mysql.sock') # 在client标题下添加 socket = /var/run/mysql.sock
config.write(open('my.cnf','w'))  # 写入文件

添加sys.path路径:

图片 51

 

置于的模块

图片 52

__doc__   是py文件的注释

图片 53

__file__  #文件自个儿的路子

图片 54

__package__  当前py文件在哪个文件夹下,假设七个路子用.连接

__cached__  做缓存用的

__name__  (重要)

__name__ == ‘__main__’的应用:

主文件: 调用函数前,必须加__name__ == ‘__main__’

 

json类别化  (Json就是字符串)

json.loads  用于将列表、字典、元组方式的字符串,转换为相应的字典,列表,元组(注意报错,格式)

图片 55

图片 56

瞩目上海体育地方的格式,报错。

json.dumps()  将获得的字典、列表,元组转换为相应的字符串

图片 57

json.dump()  获得内容再写入相应的文书内

 

再不,就算你把获得路径这几个,配置到gl也等于单独三个py中,那么不相同岗位调用。路径也会分化。

shutil 模块

shutil模块重借使对文本,文件夹,和裁减包进行操作处理的模块,相当于系统中常用的公文操作命令。
shutil.copyfileobj(fsrc, fdst[, length])
:复制文件,借使目的文件存在,则覆盖目的文件。

import shutil
shutil.copyfileobj(open('old.xml', 'r'), open('new.xml', 'w'))

shutil.copyfile(src, dst) 拷贝文件。

shutil.copyfile('new.xml', 'f2.log')

shutil.copymode(src, dst)
仅拷贝权限。文件的内容,所属用户和所属组都不变。
shutil.copystat(src, dst) 仅拷贝状态新闻,包罗: mode
bits,atime,mtime,flages.
shutil.copy(src,dst) : 拷贝文件和权力。

shutil.copy('f2.log','f1.log')

shutil.copy2(src, dst) 拷贝文件和气象新闻

shutil.copy2('f1.log', 'f2.log')

shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的正片文件目录,和shutil.ignore_patterns(*patterns)连用,排除不要求拷贝的内容:

shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) 
#目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除 

拷贝软连接:

import shutil

shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
# 通常的拷贝都把软连接拷贝成硬链接,即对待软连接来说,创建新的文件

shutil.rmtree(path[, ignore_errors[, onerror]])递归的删除文件。

shutil.rmtree('folder1')

shutil.move(src, dst)递归的去运动文件,它就像mv 命令,其实正是重命名。

shutil.move('folder1', 'folder3')

shutil.make_archive(base_name, format,...)
创造压缩包,并回到文件路径,如 zip,tar。

示例:

#将 /data 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')

#将 /data下的文件打包放置 /tmp/目录
import shutil
ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data') 

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 三个模块来拓展的.

故此哪儿错了这一个要知道,那是一个小细节;调试输出,发现输出跟以下是千篇一律的,

suprocess 模块

suprocess模块用于调用系统的shell命令.
执行命令之后,能够将下令的推行结果个别通过管道赋值给专业输出和错误输出:

import subprocess

res=subprocess.Popen(r'ipconfig|findstr 192.168',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print(res.stdout.read().decode('gbk'))
print(res.stderr.read().decode('gbk'))

出口结果:

   IPv4 地址 . . . . . . . . . . . . : 192.168.20.191
   默认网关. . . . . . . . . . . . . : 192.168.20.254
   IPv4 地址 . . . . . . . . . . . . : 192.168.56.1

一旦产生错误,提示音讯就会从stderr中输出。
在linux平台也得以利用同样的用法。
也得以行使stdin将在此以前的出口结果输入到当前的一声令下中实践,重临结果:

import subprocess

res=subprocess.Popen(r'ipconfig',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
res1=subprocess.Popen(r'findstr 192.168.20',shell=True,stdin=res.stdout,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print(res1.stdout.read().decode('gbk'))

输出结果:

   IPv4 地址 . . . . . . . . . . . . : 192.168.20.191
   默认网关. . . . . . . . . . . . . : 192.168.20.254

叁 、写完项目,直接在处理器中双击py文件,报文件中引用的包找不到

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图