Python常用知识
基础模板(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+’ 以追加的形式
lxml
lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高
XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索
XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择
库地址: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应用场景
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请求
Python常用知识的更多相关文章
- Python数据分析与挖掘所需的Pandas常用知识
Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- [转]python 常用类库!
Python学习 On this page... (hide) 1. 基本安装 2. Python文档 2.1 推荐资源站点 2.2 其他参考资料 2.3 代码示例 3. 常用工具 3.1 Pytho ...
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】
[python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...
- 适用于 PHP 开发人员的 Python 基础知识
Thomas Myer, 负责人, Triple Dog Dare Media 简介: 您是一名经验丰富的 PHP 开发人员,并且希望学习 Python 吗?本文将从 PHP 开发人员的角度来探索 P ...
- python 爬虫与数据可视化--python基础知识
摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- python 全栈开发,Day41(线程概念,线程的特点,进程和线程的关系,线程和python 理论知识,线程的创建)
昨日内容回顾 队列 队列 : 先进先出.数据进程安全 队列实现方式: 管道 + 锁 生产者消费者模型 : 解决数据供需不平衡 管道 双向通信 数据进程不安全 EOFError: 管道是由操作系统进行引 ...
随机推荐
- preg_replace
preg_replace — 执行一个正则表达式的搜索和替换 说明: preg_replace ( mixed $pattern , mixed $replacement , mixed $subje ...
- ubuntu svn 安装
deepin@deepin:~$ sudo apt-get install rabbitvcs-rabbitvcs-cli rabbitvcs-core rabbitvcs-gedit rabbitv ...
- java之理解面向对象
1.程序设计的三种基本结构 顺序结构 顺序结构表示程序中的各操作是按照它们在源代码中的排列顺序依次执行的 选择结构 选择结构表示程序的处理需要根据某个特定的条件选择其中的一个分支执行.选择结构有单选择 ...
- Comet OJ - Contest #5 简要题解
好久没更博了,还是象征性地更一次. 依然延续了简要题解的风格. 题目链接 https://cometoj.com/contest/46 题解 A. 迫真字符串 记 \(s_i\) 表示数字 \(i\) ...
- Array Beauty CodeForces - 1189F (dp,好题)
大意: 定义$n$元素序列$a$的美丽度为 $\min\limits_{1\le i<j\le n}|a_i-a_j|$. 给定序列$a$, 求$a$的所有长为$k$的子序列的美丽度之和. 记 ...
- MySQL 解决source 命令导入数据库 乱码
在我把库.表.sql脚本的编码格式都设置为UTF-8后,任然有乱码,任然有报错: 于是按以下方式重新登录后,解决: mysql -u root -p --default-character-set=u ...
- D盘Program Files 文件夹里文件不显示,没隐藏。怎么才能显示出来?
D盘里有两个一模一样的Program Files 文件夹,文件夹里文件不显示,没隐藏.怎么才能显示出来?新买不久的电脑,win8.1系统 点击开始---运行---输入“cmd”(没有引号)---在弹出 ...
- 【原创】大叔经验分享(90)linux服务器iowait和负载很高
# top top - 21:21:51 up 207 days, 1:30, 5 users, load average: 0.90, 0.79, 1.62 Tasks: 249 total, 1 ...
- IOS 主队列,全局队列的关系
同步,异步,串行,并发 同步和异步代表会不会开辟新的线程.串行和并发代表任务执行的方式. 同步串行和同步并发,任务执行的方式是一样的.没有区别,因为没有开辟新的线程,所有的任务都是在一条线程里面执行. ...
- java jdk1.8 API
里面有 中英文 jdk 1.8 API 还有 jdk1.6 和1.7 英文 API 链接:https://pan.baidu.com/s/1tchABVX7htJCaO3quENP1g提取码:y ...