基础模板(sys、os)

http://c.biancheng.net/view/2407.html

cmd中查看第三方库

eg:import aiohttp

help(aiohttp) 或者dir(aiohttp)

Time计时

打印程序运行花的时长

start_using_list = time.perf_counter()
# dosomething()
end_using_list=time.perf_counter()
print("time elapse using list: {}".format(end_using_list - start_using_list))

configparser模块(配置)

ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。 
注意:在python 3 中ConfigParser模块名已更名为configparser

生成configparser文件实例,example.ini

[DEFAULT]

serveraliveinterval = 45
compression = yes
compressionlevel = 9
forwardx11 = yes
 
[bitbucket.org]
user = hg
 
[topsecret.server.com]
host port = 50022
forwardx11 = no
import configparser  #配置文件
config = configparser.ConfigParser()
"""生成configparser配置文件 ,字典的形式"""
"""第一种写法"""
config["DEFAULT"] = {'ServerAliveInterval': '',
'Compression': 'yes',
'CompressionLevel': ''}
"""第二种写法"""
config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
"""第三种写法"""
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Host Port'] = '' # mutates the parser
topsecret['ForwardX11'] = 'no' # same here config['DEFAULT']['ForwardX11'] = 'yes'
"""写入后缀为.ini的文件"""
with open('example.ini', 'w') as configfile:
config.write(configfile)

读取configparser配置文件的实例

import configparser  #配置文件
config = configparser.ConfigParser()
config.read("example.ini") print("所有节点==>",config.sections()) print("包含实例范围默认值的词典==>",config.defaults()) for item in config["DEFAULT"]:
print("循环节点topsecret.server.com下所有option==>",item) print("bitbucket.org节点下所有option的key,包括默认option==>",config.options("bitbucket.org")) print("输出元组,包括option的key和value",config.items('bitbucket.org')) print("bitbucket.org下user的值==>",config["bitbucket.org"]["user"]) #方式一 topsecret = config['bitbucket.org']
print("bitbucket.org下user的值==>",topsecret["user"]) #方式二 print("判断bitbucket.org节点是否存在==>",'bitbucket.org' in config) print("获取bitbucket.org下user的值==>",config.get("bitbucket.org","user")) print("获取option值为数字的:host port=",config.getint("topsecret.server.com","host port"))

运行结果:

所有节点==> ['bitbucket.org''topsecret.server.com']

包含实例范围默认值的词典==> OrderedDict([('serveraliveinterval''45'), ('compression''yes'), ('compressionlevel''9'), ('forwardx11''yes')])
循环节点topsecret.server.com下所有option==> serveraliveinterval
循环节点topsecret.server.com下所有option==> compression
循环节点topsecret.server.com下所有option==> compressionlevel
循环节点topsecret.server.com下所有option==> forwardx11
bitbucket.org节点下所有option的key,包括默认option==> ['user''serveraliveinterval''compression''compressionlevel''forwardx11']
输出元组,包括option的key和value [('serveraliveinterval''45'), ('compression''yes'), ('compressionlevel''9'), ('forwardx11''yes'), ('user''hg')]
bitbucket.org下user的值==> hg
bitbucket.org下user的值==> hg
判断bitbucket.org节点是否存在==True
获取bitbucket.org下user的值==> hg
获取option值为数字的:host port= 50022

getopt模块

该模块是专门用来处理命令行参数的。因为有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,

在Python里的命令行参数是存储在sys.argv里,argv是一个列表,第一个元素为程序名称。

函数getopt(args, shortopts, longopts = [])

参数args一般是sys.argv[1:]
shortopts 短格式 (-)
longopts 长格式(--)
eg:命令行中输入:
python test.py -i 127.0.0.1 -p 80 55 66

python test.py --ip=127.0.0.1 --port=80 55 66

#!/usr/bin/env python
# encoding: utf-8 '''
sys 是一个和 Python 解释器关系密切的标准库,它和帮助我们访问和 Python 解释器联系紧密的变量和函数。
os 模块代表了程序所在的操作系统,主要用于获取程序运行所在操作系统的相关信息。 cmd中执行 python cmdParameter.py -i 127.18.21.110 -p 3304
'''
import sys
import getopt if __name__ == '__main__':
# 获取运行 Python 程序的命令行参数。其中 sys.argv[0] 通常就是指该 Python 程序,
# sys.argv[1] 代表为 Python 程序提供的第一个参数,sys.argv[2] 代表为 Python 程序提供的第二个参数……依此类推。
for item in sys.argv:
print (item) # getopt模块使用
def usage():
print("Usage:%s [-h|-i|-p] args...." % sys.argv[0]) # 使用sys.argv[1:] 过滤掉第一个参数
# 返回中options为分析出的格式信息。args 为不属于格式信息的剩余的命令行参数。
# options 是一个两元组的列表。每个元素为:( 选项串, 附加参数) 。如果没有附加参数则为空串'' 。
try:
options, args = getopt.getopt(sys.argv[1:], "hp:i:", ["help", "ip=", "port="])
except getopt.GetoptError:
sys.exit() for name, value in options:
if name in ("-h", "--help"):
usage()
if name in ("-i", "--ip"):
print ('ip is----', value)
if name in ("-p", "--port"):
print ('port is----', value) #print(args)

1. 使用sys.argv[1:] 过滤掉第一个参数(它是执行脚本的名字,不应算作参数的一部分)。  
2. 使用短格式分析串"ho:" 。当一个选项只是表示开关状态时,即后面不带附加参数时,在分析串中写入选项字符。当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个":" 号 。所以"ho:" 就表示"h" 是一个开关选项;"o:" 则表示后面应该带一个参数。  
3. 使用长格式分析串列表:["help", "output="] 。长格式串也可以有开关状态,即后面不跟"=" 号。如果跟一个等号则表示后面还应有一个参数 。这个长格式表示"help" 是一个开关选项;"output=" 则表示后面应该带一个参数。  
4. 调用getopt 函数。函数返回两个列表:opts 和args 。opts 为分析出的格式信息。args 为不属于格式信息的剩余的命令行参数。opts 是一个两元组的列表。每个元素为:( 选项串, 附加参数) 。如果没有附加参数则为空串'' 。 
5. 整个过程使用异常来包含,这样当分析出错时,就可以打印出使用信息来通知用户如何使用这个程序。

Global的用法

在函数内部定义变量时,他们与函数外部具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的,这称为变量的作用域,示例如下:

def func_local(x):
print 'x is', x
x = 2
print 'Chanaged local x to',x x = 50
func_local(x)
print 'x is still', x

执行结果:

x is 50
Chanaged local x to 2
x is still 50

如果想在函数内部改变函数外的变量值,用global语句完成

def func_global():
global y
print 'y is', y
y = 50
print 'Changed local y to', y y = 10
func_global()
print 'Value of y is', y

执行结果:

y is 10
Changed local y to 50
Value of y is 50

若传入可变参数如list、set、dict,在函数内部对参数做出修改,参数本身发生变化,tuple、str不变。

更多参考:python中global的用法

文件操作

1、相对路径

“/”:表示根目录,在windows系统下表示某个盘的根目录,如“E:\”;

“./”:表示当前目录;(表示当前目录时,也可以去掉“./”,直接写文件名或者下级目录)

“../”:表示上级目录。

2、读写文件的模式

with open('out.txt','w') as fout:

'w' 对文件写操作 ; 'r' 对文件读操作 ; 'rw' 对文件读和写操作。

‘a+’ 以追加的形式

python 获取脚本所在目录的正确方法

lxml

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高

XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索

XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择

python3解析库lxml

库地址:Links for lxml

Request模块请求接口

想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:

payload = {'key1': 'value1', 'key2': 'value2'}

r = requests.post("http://httpbin.org/post", data=payload)

1、调用webservice接口传递数据

r = requests.post(post_url, post_data)

其中
post_url= "http://"+ server_host + ":" + server_port + "/paking/PakingMgr.asmx"+”/”+”ReportData”
post_data = {"rqString": json.dumps(data)}
因为ReportData()函数的参数名称是rqString
data={
"ID": "",
"PARKINGID": "",
"POSRL": 1,
"POSINDEX": 1,
"TIME": 1500353416,
"PLATE": "",
"OBUID": "6198b2d6" ,
"STATUS": 0,
"POSX": 4.66,
"POSY": 27.48
}
接口返回:r.text

POST一个多部分编码(Multipart-Encoded)【字符串和文件】的文件

Requests 使得上传多部分编码文件变得很简单:

2、调用webservice接口上传文件

r = requests.post(post_url, data=data, files=files)
其中
data={"filename": dataJson['PATH']}
dataJson['PATH']= "lot_photo/2018-02-10/PARKING0013/65/3/1/1.jpg"
files = {"file": open(filename, "rb")}
filename = os.path.realpath(dataJson['PATH'])

with关键字

在实际的编码过程中,有时有一些任务,需要事先做一些设置,事后做一些清理,这时就需要python with出场了,with能够对这样的需求进行一个比较优雅的处理,最常用的例子就是对访问文件的处理。

#一般访问文件资源时我们会这样处理:

f = open(r'c:\test.txt', 'r')
data = f.read()
f.close() #以下的加强版本的写法: f = open(r'c:\test.txt', 'r')
try:
data = f.read()
finally:
f.close()

一般的写法没有错,但是容易犯两个毛病:
1. 如果在读写时出现异常而忘了异常处理。
2. 忘了关闭文件句柄
加强版的写法就可以避免因读取文件时异常的发生而没有关闭问题的处理了。代码长了一些。

但使用with有更优雅的写法:【with表达式其实是try-finally的简写形式。但是又不是全相同】

with open(r'c:\test.txt', 'r') as f:
data = f.read()

说明:
with后面接的对象返回的结果赋值给f。此例当中open函数返回的文件对象(_io.TextIOWrappe)赋值给了f。

执行with这个结构之后。f会自动关闭。相当于自带了一个finally。

with会自已获取上下文件的异常信息。
with是如何做到的呢?
with后面返回的对象要求必须__enter__()和__exit__()这两个方法,而文件对象f刚好是有这两个方法的,故应用自如。

pytho中官方定义说明如下():

object.__enter__(self)
进入与此对象相关的运行时上下文。with语句将将此方法的返回值绑定到语句的AS子句中指定的目标(如果有设置的话)

object.__exit__(self, exc_type, exc_value, traceback)
退出与此对象相关的运行时上下文。参数描述导致上下文退出的异常。如果上下文运行时没有异常发生,那么三个参数都将置为None。
如果有异常发生,并且该方法希望抑制异常(即阻止它被传播),则它应该返回True。否则,异常将在退出该方法时正常处理。

请注意, __exit__()方法不应该重新抛出传入的异常,这是调用者的职责。

参考:with的神奇魔法        python的with关键字

with应用场景

1、文件操作。2、进程线程之间互斥对象。3、支持上下文其他对象

报错

1、ImportError: cannot import name 'web'

在引入 from aiohttp import web的时候,运行报上面的错误。在尝试了将aiohttp重装等操作后,还是有问题。。后来发现自己创建的文件名是aiohttp.py,于是改掉。

系统会调用自己创建的aiohttp.py本身,而不是去调用系统的aiohttp库,导致一直报错。

究其原因就是:python程序的名字和自带模块重名,导致错误!!!

2、pandas.read_csv() 报错:Initializing from file failed

"""
python 3.6.1
环境下,read_csv 读入文件时,会出现OSError: Initializing from file failed错误。
如果文件路径中有中文,或者文件名为中文,就会报错 (没中文就不会有错误)。错误信息:
python3.6
改了文件输入输出系统的默认编码,从"mbcs" 改为"UTF-8"
想要改回来,可以这样:每次打开python/运行python代码都需要修改一次。
"""
import sys
print(sys.getfilesystemencoding())
sys._enablelegacywindowsfsencoding()
print(sys.getfilesystemencoding())

3、urllib.error.URLError: <urlopen error unknown url type: https>

在使用URLopen方法的时候,当目标网站使用的是自签名的证书时就会抛出这个错误,需要

import ssl
并加上如下一句:
#全局取消证书验证
ssl._create_default_https_context = ssl._create_unverified_context

4、POST data should be bytes, an iterable of bytes

原因:组装数据的时候  其中的data需要转为utf-8

解决方案:

# 组装POST方法的请求
#将代码request =urllib.request.Request(url, data, headers)
更改为 request = urllib.request.Request(url, data=urllib.parse.urlencode(data).encode(encoding='UTF8'), headers=headers)

更多参考 Python3 使用urllib 发送application/json格式的post请求

最新文章

  1. 快速构建App界面的框架(●&#39;◡&#39;●) -----SalutJs
  2. .net与数据库知识点
  3. python 装饰器初步学习
  4. QT 的下载地址
  5. php socket
  6. 在 MacOS 上编译链接 OpenGL 程序
  7. HDU4523+简单
  8. 10,随机等概率的输出m个不重复的数
  9. Servlet:response生成图片验证码
  10. 201521123023《Java程序设计》第7周学习总结
  11. java 线程 捕获异常
  12. [BZOJ1306] [CQOI2009] match循环赛 (搜索)
  13. STL 贺习笔记
  14. PHP入门知识
  15. Linux网络编程学习(六) ----- 管道(第四章)
  16. 《Mysql必知必会》笔记
  17. python标准库介绍——14 gc 模块详解
  18. eclipse导入Java源码
  19. linux 安装php7 Nginx
  20. hadoop Shell命令详解

热门文章

  1. 关于UBOOT,LINUX内核编译,根文件系统的15个小问题
  2. js 根据 数组条件 简单查询的方法临时保存
  3. C# wsdl.exe 生成类文件
  4. Keras 训练 inceptionV3 并移植到OpenCV4.0 in C++
  5. Django自定义指令+mq消息队列的使用
  6. Servlet实现图片读取显示
  7. 脱壳系列—— *加密脱壳(Android使用手册破解)
  8. Mysql基础学习_Windows版(一)
  9. Ubuntu的apt-get代理设置
  10. 异常-Exception in thread &quot;main&quot; net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: &lt;EOF&gt; after :