【澳门葡京备用网址】Python常用模块,持续革新

1、在选拔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

简介:

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

  • 自定义模块
  • 其三方模块
  • 放到模块

【澳门葡京备用网址】Python常用模块,持续革新。简介:

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

  • 自定义模块
  • 其三方模块
  • 放手模块

化解办法:

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

升迁:第三方模块名不可以和松开以及第三方模块重名

导入模块: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’
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)

添加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文件是一个树形结构的数量,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())

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

2、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

没错,大家就是东拼西凑的时候,多了三个返斜扛。去掉后难题一蹴即至。

 

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

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

澳门葡京备用网址 59

案由:双击执行的时候,不会自行进化搜索包,只会在脚下文件夹及子文件夹中搜寻

那么如何是好呢,把举办文书,在项目根目录下建个run.py做为执行入口,难题化解。

澳门葡京备用网址 60

 

您可能会说了,那样做,我有些引用路径的地方不对了,那我估算是得到路径的法门是

os.getcur
 获取当前路线,那样一来,你各种文件用的门路都以现阶段引用文件所在的门道

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

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

要不然,即使你把得到路径这几个,配置到gl约等于单身一个py中,那么差别义务调用。路径也会差异。

 

相关文章

发表评论

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

*
*
Website