Python3学习笔记---数据存储
一、CSV
import csv
dic={'year':'1991年','num':'10人评论','pcore':'10分'}
f = open("data.csv",mode='a',encoding="utf8")
csv_w = csv.writer(f)
csv_w.writerow(dic.values())
f.close()
二、图片存储
#请求图片URL下载图片
img_resp = requests.get(img_url)
f = open('img/'+img_name,mode='wb')
f.write(img_resp.content) #通过img_resp.content 可以拿到图片的字节
f.close()
三、处理XML数据
import xml.sax
import xml.sax.handler
# python 处理xml 数据 类,将xml数据转化为字典
'''
原数据:<?xml version='1.0' encoding='UTF-8'?><recordset><user><empNo>9321</empNo><name>张氏</name><mis>张氏</mis><system>百度</system><fullDeptName>/百度/销售支持部/业务培训组</fullDeptName><position>业务培训经理</position><positionType>管理类</positionType><ygState>正式</ygState><ygType>管理员工</ygType><zwz>管理族</zwz><rzDate>2008-04-02</rzDate><zzDate>2008-06-01</zzDate><zone>北京</zone><dxqs>15</dxqs><iflz>否</iflz><lzDate>null</lzDate><ssoid>9764043</ssoid><im>zhangshi</im><email>zhangshi@baidu.com</email></user></recordset> 7 处理后:{'empNo': '9321', 'name': '张氏', 'mis': '张氏', 'system': '百度', 'fullDeptName': '/百度/销售支持部/业务培训组', 'position': '业务培训经理', 'positionType': '管理类', 'ygState': '正式', 'ygType': '管理员工', 'zwz': '管理族', 'rzDate': '2008-04-02', 'zzDate': '2008-06-01', 'zone': '北京', 'dxqs': '15', 'iflz': '否', 'lzDate': 'null', 'ssoid': '9764043', 'im': 'zhangshi', 'email': 'zhangshi@baidu.com', 'user': 'zhangshi@baidu.com', 'recordset': 'zhangshi@baidu.com'} 8 '''
class XMLHandler(xml.sax.handler.ContentHandler):
def __init__(self):
self.buffer = ""
self.mapping = {}
def startElement(self, name, attributes):
self.buffer = ""
def characters(self, data):
self.buffer += data
def endElement(self, name):
self.mapping[name] = self.buffer
def getDict(self):
return self.mapping
#调用函数,处理xml数据
xh = XMLHandler()
xml.sax.parseString(r11.encode(), xh) #r11 为XML 数据。
result_dict = xh.getDict()
四、Oracle 数据库
import cx_Oracle #pip install cx_Oracle
#连接数据库
oracle_db_cur = cx_Oracle.connect('用户名/密码@IP:端口/实例名').cursor()
#查询数据:提取出前50行
my_data = oracle_db_cur.execute('''select * from (select 字段1, 字段2, 字段3,...,字段n from 表名 order by update_date) where rownum < 50''')
#遍历数据
my_data = my_data.fetchall()
for i in my_data:
print(i)
注:如果windows 连接报错:cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified modue ......
解决方案:
1、下载instant-client :https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
2、解压软件,将文件中的所有 .dll 的文件拷贝至 Python 安装目录的 Lib/site-packages。
五、Redis
import redis
#连接
r = redis.Redis(host='redis_IP',port=端口,db=0,password='密码')
#插入str
r.set('name','3333') #插入成功,返回True
r.get('name') #查看结果
#插入Set
r.sadd('my_set','135543') #插入成功,返回1
r.smembers('my_set') #查看结果
#使用连接池管理连接
# 使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。
# 默认,每个Redis实例都会维护一个自己的连接池。
# 可以直接建立一个连接池,然后作为Redis的构造参数,这样就可以实现多个Redis实例共享一个连接池。
pool = redis.ConnectionPool(host='127.0.0.1', port=6379,db=1,password="your_passwd")
r = redis.Redis(connection_pool=pool)
r.set('name', 'redis') #添加
print(r.get('name')) #获取
#######连接redis 集群###########
from rediscluster import RedisCluster #依赖包安装 :pip install redis-py-cluster
def redis_cluster():
redis_nodes = [
{'host':'server1','port':端口},
{'host':'server2','port':端口},
{'host':'server3','port':端口},
]
try:
rc = RedisCluster(startup_nodes=redis_nodes,password='密码')
return rc
except Exception as e:
print(e)
print("error,connection Rediscluster fail!!!!")
return False
IT运维开发路上的点点滴滴。。。