Python使用中张冠李戴,Python常用模块

by admin on 2019年3月28日

① 、在行使requests发送请求,响应数据转成json提示,没有可解码的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

简介:

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

  • 自定义模块
  • 其三方模块
  • 嵌入模块

简介:

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

  • 自定义模块
  • 其三方模块
  • 嵌入模块

消除办法:

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

python去找模块的路线

bf88必发唯一官网 1

内部,第1方模块安装的职责

bf88必发唯一官网 2

提示:第1方模块名不可能和停放以及第叁方模块重名

导入模块:from lib.account import login

 

python去找模块的路子

bf88必发唯一官网 3

在那之中,第二方模块安装的职位

bf88必发唯一官网 4

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

导入模块:from lib.account import login

 

那是出于,发送请求的数码,存在张冠李戴,响应出错比如404
400,所以找不到能够解码的json

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是3个设有的目录,则赶回True。不然再次回到False
Python使用中张冠李戴,Python常用模块。os.path.join(path1[Python使用中张冠李戴,Python常用模块。, 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)

添加sys.path路径:

bf88必发唯一官网 5

 

添加sys.path路径:

bf88必发唯一官网 6

 

示范如下:

sys模块

sys.argv 命令行参数List,第1个成分是先后本人路径
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='')

os模块(和系统有关)

os.stat(“path“)  获取文件目录新闻

bf88必发唯一官网 7

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

bf88必发唯一官网 8

os.path.exists(path)  要是path存在则赶回true,不然返回false

bf88必发唯一官网 9

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

bf88必发唯一官网 10

 

os模块(和系统相关)

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

bf88必发唯一官网 11

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

bf88必发唯一官网 12

os.path.exists(path)  倘若path存在则赶回true,不然重返false

bf88必发唯一官网 13

os.path.join(path1[,path2[,…]])  将四个途径组合后赶回,第③个相对路径在此之前的参数将被忽略

bf88必发唯一官网 14

 

postdata = '''{'userName':'13718651996',
            'passwd':'yhlxxxx870120',
            'validateCode':'abc',
            'rememberMe':'true'}'''
url = 'https://secure.elong.com/passport/ajax/elongLogin'
response = Session().post(url,data=postdata)
print(response.json())

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。

  • base_name:压缩包的公文名,也足以是压缩包的途径。只是文件名时,则保留当前至当前目录,不然保存至内定路线。如
    data_bak =>保存至方今路。如:/tmp/data_bak =>保存至/tmp/
  • format:压缩包体系,“zip”, “tar”, “bztar”,“gztar”
  • root_dir:要压缩的文本夹路径(默许当前目录)
  • owner:用户,私下认可当前用户
  • group: 组,暗中认可当前组
  • logger:用于记录日志,日常是logging.Logger对象

示例:

#将 /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 七个模块来开始展览的.

 hashlib模块:  (加密唇揭齿寒操作)

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

md5加密是不得以反解的。

bf88必发唯一官网 15

因为各类电脑上的md5加密出来的数量都以平等的,所以会被人家取得加密相应的用户名,密码。所以要协调再定制,使md5加密出来的数额只存在自个儿的电脑上。

bf88必发唯一官网 16

加密登录注册实例:

bf88必发唯一官网 17

 

 bf88必发唯一官网 18

 

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

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

md5加密是不得以反解的。

bf88必发唯一官网 19

因为每种电脑上的md5加密出来的数额都是相同的,所以会被别人拿走加密对应的用户名,密码。所以要团结再定制,使md5加密出来的多寡只设有本身的微处理器上。

bf88必发唯一官网 20

加密登录注册实例:

bf88必发唯一官网 21

 

 bf88必发唯一官网 22

 

其实从图上很明白能见到难点,因为postdata是字符串类型,不是dict字典

json&pickle模块

把对象(变量)从内部存款和储蓄器中成为可存款和储蓄或传输的历程称之为连串化,在Python中叫pickling.

  • json:
    json援助具有通用项指标操作,对于python特有的效果不协理,就有很好的跨平台性。
    在动用eval执行字符串表明式是有局限性的,对于常见的数据类型,json.loads和eval都能用,但境遇尤其类别的时候,eval就随便用了,所以eval的显要仍旧经常用来推行多少个字符串表明式,并回到表明式的值。
    行使json.dump()能够将字典函数等类型转换为字符串类型,方便存款和储蓄:

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’}

  • pickle: 是python
    特有系列化操作,能够体系化函数等特殊类型。与json的行使方式接近。

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

放手的模块

bf88必发唯一官网 23

__doc__   是py文件的诠释

bf88必发唯一官网 24

__file__  #文件本人的路子

bf88必发唯一官网 25

__package__  当前py文件在哪些文件夹下,假若两个路子用.连接

__cached__  做缓存用的

__name__  (重要)

__name__ == ‘__main__’的应用:

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

 

json连串化  (Json正是字符串)

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

bf88必发唯一官网 26

bf88必发唯一官网 27

瞩目上海教室的格式,报错。

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

bf88必发唯一官网 28

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

 

置于的模块

bf88必发唯一官网 29

__doc__   是py文件的笺注

bf88必发唯一官网 30

__file__  #文件自身的路径

bf88必发唯一官网 31

__package__  当前py文件在哪些文件夹下,假使多少个途径用.连接

__cached__  做缓存用的

__name__  (重要)

__name__ == ‘__main__’的应用:

主文件: 调用函数前,必须加__bf88必发唯一官网,name__ == ‘__main__’

 

json体系化  (Json便是字符串)

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

bf88必发唯一官网 32

bf88必发唯一官网 33

注意上海体育场合的格式,报错。

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

bf88必发唯一官网 34

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

 

如上海体育地方代码假设推行报如下错误:

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

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

bf88必发唯一官网 35

 

 bf88必发唯一官网 36

 

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

bf88必发唯一官网 37

 

 bf88必发唯一官网 38

 

bf88必发唯一官网 39

xml模块

xml是先后之间举办数量交互的协商,在多少应用中还会使用XML协议。xml和json类似,也是跨平台,xml协议在依次语言中都以援助的。
xml文件是3个树形结构的多少,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')

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

bf88必发唯一官网 40

bf88必发唯一官网 41

bf88必发唯一官网 42

 

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

bf88必发唯一官网 43

bf88必发唯一官网 44

bf88必发唯一官网 45

 

化解办法,eval()函数将字符串,转换来字典;如下所示

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'))  # 写入文件

subprocess模块

bf88必发唯一官网 46

 

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

bf88必发唯一官网 47

bf88必发唯一官网 48

bf88必发唯一官网 49

bf88必发唯一官网 50

bf88必发唯一官网 51

 

subprocess模块

bf88必发唯一官网 52

 

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

bf88必发唯一官网 53

bf88必发唯一官网 54

bf88必发唯一官网 55

bf88必发唯一官网 56

bf88必发唯一官网 57

 

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

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模块类似的还有贰个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

有人可能会说,你那不是大惊小怪吗?把postdata直接定义成字典不就行了;你说的正确性确实能够这样

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
postdata = {'userName':'13718651996',
            'passwd':'yhlxxxx870120',
            'validateCode':'abc',
            'rememberMe':'true'}
url = 'https://secure.elong.com/passport/ajax/elongLogin'
request = Session().post(url,data=postdata)
print(request.json())

而是一旦以下那串数据,存款和储蓄在数据库中,也许excel中,读出来的时候默许正是字符串,倘诺读出来直接动用就会现出本文的失实,

所以何地错了这一个要知道,那是1个小细节;调节和测试输出,发现输出跟以下是一致的,

尚未错呀那是字典呢{‘xxxx’:’xxx’……….},可是它正是字符串。不难被忽视,所以还要选用eval(postdata)函数转成字典

{'userName':'13718651996',
            'passwd':'yhlxxxx870120',
            'validateCode':'abc',
            'rememberMe':'true'}

正确代码:

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

------------------------------我是华侈的分隔线----------------------------------

二 、join拼接路径

os.path.join拼接路径,境遇的题材,日常会把自个儿绕进去

 

str = r'd:\PHJ\Reporter\LOGS'
#报告文件路径
reporPath = os.path.join(str,'report')
isExistPath(reporPath) #创建文件夹

print(reporPath)

imgPath = os.path.join(reporPath,'\\Image')
print(imgPath)

 

荒唐输出输出:

d:\PHJ\Reporter\LOGS\report
d:\Image

小编们愿意结果:

d:\PHJ\Reporter\LOGS\report
d:\PHJ\Reporter\LOGS\report\Image

是否很奇怪,难点到底出在哪儿,那个难题让自个儿纠结了绵绵,三个不太专注的没有毛病。

bf88必发唯一官网 58

正确,大家正是东拼西凑的时候,多了多个返斜扛。去掉后难点一下子就解决了。

 

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

类型布局,要执行run文件夹下的run.py ;报找不到run文件中援引的包

bf88必发唯一官网 59

由来:双击执行的时候,不会活动进化搜索包,只会在当下文件夹及子文件夹中寻找

那么怎么做吧,把实践文书,在档次根目录下建个run.py做为执行入口,难点消除。

bf88必发唯一官网 60

 

您或许会说了,那样做,作者有些引用路径的地方不对了,那小编推断是收获路径的措施是

os.getcur
 获取当前路线,那样一来,你各样文件用的路径都是眼前援引文件所在的门径

故此提出起个gl文件,用来囤积路径。等音信。

os.path.abspath(os.path.dirname(__file__))
用那么些获得当前路线,而不用用os.getcur

要不,尽管你把收获路径这一个,配置到gl也便是独自八个py中,那么分裂地方调用。路径也会不一样。

 

发表评论

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

网站地图xml地图