① 、在选拔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去找模块的路线

金沙注册送58 1

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

金沙注册送58 2

提醒:第叁方模块名无法和停放以及第壹方模块重名

导入模块:from lib.account import login

 

python去找模块的不二法门

金沙注册送58 3

中间,第壹方模块安装的岗位

金沙注册送58 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() 删除三个文书
Python常用模块,Python使用中指鹿为马。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
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路径:

金沙注册送58 5

 

添加sys.path路径:

金沙注册送58 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“)  获取文件目录音信

金沙注册送58 7

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

金沙注册送58 8

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

金沙注册送58 9

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

金沙注册送58 10

 

os模块(和系统相关)

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

金沙注册送58 11

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

金沙注册送58 12

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

金沙注册送58 13

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

金沙注册送58 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加密是不得以反解的。

金沙注册送58 15

因为各样电脑上的md5加密出来的数据都以同样的,所以会被人家取得加密相应的用户名,密码。所以要本身再定制,使md5加密出来的数码只存在本人的微型总结机上。

金沙注册送58 16

加密登录注册实例:

金沙注册送58 17

 

 金沙注册送58 18

 

 hashlib模块:  (加密皮之不存毛将焉附操作)

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

md5加密是不得以反解的。

金沙注册送58 19

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

金沙注册送58 20

加密登录注册实例:

金沙注册送58 21

 

 金沙注册送58 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’}

  • 金沙注册送58,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'])   

内置的模块

金沙注册送58 23

__doc__   是py文件的诠释

金沙注册送58 24

__file__  #文本本人的不二法门

金沙注册送58 25

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

__cached__  做缓存用的

__name__  (重要)

__name__ == ‘__main__’的应用:

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

 

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

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

金沙注册送58 26

金沙注册送58 27

专注上航海用图书馆的格式,报错。

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

金沙注册送58 28

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

 

松手的模块

金沙注册送58 29

__doc__   是py文件的注释

金沙注册送58 30

__file__  #文本自个儿的门径

金沙注册送58 31

__package__  当前py文件在哪个文件夹下,若是八个途径用.连接

__cached__  做缓存用的

__name__  (重要)

__name__ == ‘__main__’的应用:

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

 

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

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

金沙注册送58 32

金沙注册送58 33

留意上海图书馆的格式,报错。

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

金沙注册送58 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模块:  (打开,读取特定格式的文件)(暗许文件都以字符串)

金沙注册送58 35

 

 金沙注册送58 36

 

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

金沙注册送58 37

 

 金沙注册送58 38

 

金沙注册送58 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模块(高级文件、文件夹、压缩包处理模块)

金沙注册送58 40

金沙注册送58 41

金沙注册送58 42

 

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

金沙注册送58 43

金沙注册送58 44

金沙注册送58 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模块

金沙注册送58 46

 

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

金沙注册送58 47

金沙注册送58 48

金沙注册送58 49

金沙注册送58 50

金沙注册送58 51

 

subprocess模块

金沙注册送58 52

 

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

金沙注册送58 53

金沙注册送58 54

金沙注册送58 55

金沙注册送58 56

金沙注册送58 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 58

不错,大家正是东拼西凑的时候,多了多个返斜扛。去掉后难题化解。

 

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

品种协会,要执行run文件夹下的run.py ;报找不到run文件中援引的包

金沙注册送58 59

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

那么如何是好吧,把推行文书,在项目根目录下建个run.py做为执行入口,难题消除。

金沙注册送58 60

 

您也许会说了,那样做,小编某些引用路径的地点不对了,那我推测是得到路径的主意是

os.getcur
 获取当前路线,那样一来,你各种文件用的不二法门都以当下引用文件所在的途径

因此提出起个gl文件,用来储存路径。等音信。

os.path.abspath(os.path.dirname(__file__))
用那个得到当前路线,而不用用os.getcur

要否则,固然你把获得路径这几个,配置到gl约等于单身二个py中,那么区别职务调用。路径也会不一致。

 

相关文章

网站地图xml地图