设为首页 收藏本站
查看: 856|回复: 0

[经验分享] python几个包的使用

[复制链接]

尚未签到

发表于 2017-4-26 11:17:31 | 显示全部楼层 |阅读模式
  一,pickle模块使用的数据格式是python专用的,并且不同版本不向后兼容,同时也不能被其他语言说识别。用于将数据方便地从文件或网络存取。示例如下:

#!/usr/bin/python
import pickle
def save_data(file, data):
pickle.dump(data, open(file, 'w'))
def load_data(file):
return pickle.load(open(file, 'r'))
if __name__ == '__main__':
data = {}
data[0] = "apple"
data["name"] = "ciaos"
print data
save_data("save.dat", data)
loaddata = load_data("save.dat")
print loaddata

  执行效果如下:

root # python test.py
{0: 'apple', 'name': 'ciaos'}
{0: 'apple', 'name': 'ciaos'}
  二,ConfigParser解析的配置文件的格式比较象ini的配置文件格式,就是文件中由多个section构成,每个section下又有多个配置项

root # cat test.conf
[db]
db_host=127.0.0.1
db_port=3306
db_user=root
db_pass=password
[concurrent]
thread=10
processor=20


#test.py
#!/usr/bin/python
import ConfigParser
import string, os, sys
cf = ConfigParser.ConfigParser()
cf.read("test.conf")
# return section
s = cf.sections()
print 'section:', s
o = cf.options("db")
print 'options:', o
v = cf.items("db")
print 'db:', v
print '-'*60
db_host = cf.get("db", "db_host")
db_port = cf.getint("db", "db_port")
db_user = cf.get("db", "db_user")
db_pass = cf.get("db", "db_pass")
threads = cf.getint("concurrent", "thread")
processors = cf.getint("concurrent", "processor")
print "db_host:", db_host
print "db_port:", db_port
print "db_user:", db_user
print "db_pass:", db_pass
print "thread:", threads
print "processor:", processors
cf.set("db", "db_pass", "zhaowei")
cf.write(open("test.conf", "w"))

  执行效果如下:

root # python test.py
section: ['db', 'concurrent']
options: ['db_host', 'db_port', 'db_user', 'db_pass']
db: [('db_host', '127.0.0.1'), ('db_port', '3306'), ('db_user', 'root'), ('db_pass', 'password')]
------------------------------------------------------------
db_host: 127.0.0.1
db_port: 3306
db_user: root
db_pass: password
thread: 10
processor: 20
  三,python提供了一个日志模块logging,它可以把我们想要的信息全部保存到一个日志文件中,方面我们查看

import logging
def get_logger(log_name):
logger = logging.getLogger()
formatter = logging.Formatter('%(pathname)s - %(asctime)s - %(name)s - %(levelname)s - %(message)s',)
file_handler = logging.FileHandler(log_name)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.setLevel(logging.NOTSET)
return logger

logger = get_logger("file.log")
logger.debug('debug')   
logger.info('info')   
logger.warning('warn')  
logger.error('error')
#
# root # cat test.log
# test.py - 2013-05-28 23:59:22,771 - root - ERROR - test one
# test.py - 2013-05-28 23:59:22,771 - root - ERROR - test two
#

  四,import pdb包用于代码调试,在需要设置断点的地方添加pdb.set_trace()
  参照http://blog.csdn.net/luckeryin/article/details/4477233
  五,python脚本中若包含中文字符,运行会出错,可以在源代码文件前面添加如下代码即可

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')

  六,post表单

import urllib
import urllib2
postdata = {"name":"test"}
f = urllib2.urlopen(
url     = "http://127.0.0.1/post.php",
data    = urllib.urlencode(postdata)
)
print f.read()
  七,利用urllib2实现文件下载

def downloader(filename, url):
try:
f = urllib2.urlopen(url,timeout=10800)
with open(filename, "wb") as code:
code.write(f.read())
except:
logger.critical(sys.exc_info())
logger.error("download error " + url)
return 0
logger.info("download ok " + url)
return 1


#计算下载文件md5
def downloader(filename, url):
try:
m = hashlib.md5()  
f = urllib2.urlopen(url,timeout=10800)
m.update(f.read())   
print m.hexdigest()
time.sleep(2)
except:
print "error"
return 0
 八,http(s)请求设置长连接

#coding=UTF-8
import httplib
import time
from time import clock
import ssl
def url_open(conn_obj):
"""httplib长连接"""
uri="/test.file"
try:
conn_obj.request("GET", uri, "", {"Connection":"keep-alive"})
#conn_obj.request("POST", "/func","param=0", {"Connection":"Keep-Alive"})
response = conn_obj.getresponse()
return response.read()
except:
return "error"
if __name__ == "__main__":
start = time.time()
#http request
#conn = httplib.HTTPConnection("localhost:80")
#https request
conn = httplib.HTTPSConnection("localhost:443")
for i in range(100):
ret = url_open(conn)
conn.close()
end = time.time()
print (end-start)
九,twisted


#!/usr/bin/python
from sys import argv
from pprint import pformat
#from twisted.internet.task import react
from twisted.internet import reactor
from twisted.web.client import Agent, readBody
from twisted.web.http_headers import Headers
total_times = 1000
times = 0
def cbRequest(response):
print 'Response version:', response.version
print 'Response code:', response.code
print 'Response phrase:', response.phrase
print 'Response headers:'
print pformat(list(response.headers.getAllRawHeaders()))
d = readBody(response)
d.addCallback(cbBody)
return d
def cbBody(body):
#print 'Response body:'
print body
def cbShutdown(ignored):
global times
times = times + 1
if total_times - 1 < times:
reactor.stop()
def curl(url):
agent = Agent(reactor)
d = agent.request(
'GET', url,
Headers({'User-Agent': ['Twisted Web Client Example']}),
None)
d.addCallback(cbRequest)
d.addBoth(cbShutdown)
return d
if __name__ == '__main__':
for i in range(total_times):
curl("http://web.kuaipan.cn/static/images/pc.png")
reactor.run()
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-369481-1-1.html 上篇帖子: Python 虚拟环境:Virtualenv 下篇帖子: python django | django-groundwork
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表