Python常用模块,Python使用中错误

一 、在应用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去找模块的途径

美高梅开户网址 1

里头,第二方模块安装的任务

美高梅开户网址 2

唤醒:第③方模块名无法和放手以及第1方模块重名

导入模块:from lib.account import login

 

python去找模块的路子

美高梅开户网址 3

里面,第壹方模块安装的地方

美高梅开户网址 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’
Python常用模块,Python使用中错误。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)的第3个成分
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)

添加sys.path路径:

美高梅开户网址 5

 

添加sys.path路径:

美高梅开户网址 6

 

示范如下:

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

os模块(和连串有关)

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

美高梅开户网址 7

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

美高梅开户网址 8

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

美高梅开户网址 9

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

美高梅开户网址 10

 

os模块(和种类有关)

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

美高梅开户网址 11

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

美高梅开户网址 12

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

美高梅开户网址 13

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

美高梅开户网址 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加密是不得以反解的。

美高梅开户网址 15

因为各类电脑上的md5加密出来的数目都以同一的,所以会被别人拿走加密对应的用户名,密码。所以要和谐再定制,使md5加密出来的多少只设有本身的微型总计机上。

美高梅开户网址 16

加密登录注册实例:

美高梅开户网址 17

 

 美高梅开户网址 18

 

 hashlib模块:  (加密生死相依操作)

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

md5加密是不得以反解的。

美高梅开户网址 19

因为每一种电脑上的md5加密出来的数据都以一律的,所以会被别人拿走加密对应的用户名,密码。所以要团结再定制,使md5加密出来的数码只设有自个儿的微机上。

美高梅开户网址 20

加密登录注册实例:

美高梅开户网址 21

 

 美高梅开户网址 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'])   

松开的模块

美高梅开户网址 23

__doc__   是py文件的评释

美高梅开户网址 24

__file__  #文本本身的路径

美高梅开户网址 25

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

__cached__  做缓存用的

__name__  (重要)

__name__ == ‘__main__’的应用:

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

 

json系列化  (Json就是字符串)

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

美高梅开户网址 26

美高梅开户网址 27

瞩目上航海用体育场合的格式,报错。

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

美高梅开户网址 28

json.dump()  得到内容再写入相应的文件内

 

放到的模块

美高梅开户网址 29

__doc__   是py文件的注释

美高梅开户网址 30

__file__  #文本本人的门径

美高梅开户网址 31

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

__cached__  做缓存用的

__name__  (重要)

__name__ == ‘__main__’的应用:

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

 

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

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

美高梅开户网址 32

美高梅开户网址 33

小心上海教室的格式,报错。

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

美高梅开户网址 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模块:  (打开,读取特定格式的文本)(私下认可文件都以字符串)

美高梅开户网址 35

 

 美高梅开户网址 36

 

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

美高梅开户网址 37

 

 美高梅开户网址 38

 

美高梅开户网址 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模块(高级文件、文件夹、压缩包处理模块)

美高梅开户网址 40

美高梅开户网址 41

美高梅开户网址 42

 

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

美高梅开户网址 43

美高梅开户网址 44

美高梅开户网址 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模块

美高梅开户网址 46

 

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

美高梅开户网址 47

美高梅开户网址 48

美高梅开户网址 49

美高梅开户网址 50

美高梅开户网址 51

 

subprocess模块

美高梅开户网址 52

 

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

美高梅开户网址 53

美高梅开户网址 54

美高梅开户网址 55

美高梅开户网址 56

美高梅开户网址 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中,读出来的时候暗中同意就是字符串,假使读出来直接利用就会并发本文的荒唐,

就此何地错了那个要掌握,那是二个小细节;调节和测试输出,发现输出跟以下是同样的,

尚未错呀那是字典呢{‘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

是还是不是很奇怪,难点到底出在哪个地方,这些难点让小编纠结了绵绵,五个不太注意的小标题。

美高梅开户网址 58

科学,我们正是拼接的时候,多了八个返斜扛。去掉后问题一举成功。

 

③ 、写完项目,直接在电脑中双击py文件,报文件中引用的包找不到

类别结构,要执行run文件夹下的run.py ;报找不到run文件中引用的包

美高梅开户网址 59

原因:双击执行的时候,不会自行进化搜索包,只会在近年来文件夹及子文件夹中摸索

那就是说怎么做吧,把履行文书,在档次根目录下建个run.py做为执行入口,问题一蹴即至。

美高梅开户网址 60

 

您恐怕会说了,那样做,笔者有的引用路径的地方不对了,那本身测度是获得路径的方法是

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

所以提议起个gl文件,用来储存路径。等音讯。

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

要不然,固然你把获得路径那么些,配置到gl也便是单身一个py中,那么区别职务调用。路径也会不一致。

 

发表评论

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

网站地图xml地图