Python--进阶处理6

 

# =================第六章:数据编码和处理======================

# 读CSV文件
# 数据读取为一个元组的序列
import csv
# with open('E:/stocks.csv') as f:
# f_csv = csv.reader(f)
# headers = next(f_csv)
# for row in f_csv:
# print(row[0], row[4])
# # 数据读取到一个字典序列中去
# with open('E:/stocks.csv') as f:
# f_csv = csv.DictReader(f)
# for row in f_csv:
# print(row['Symbol'], row['Time'])

# 写CSV文件
headers = ['Symbol','Price','Date','Time','Change','Volume']
# rows = [
# ('AA', 39.48, '6/11/2007', '9:36am', -0.18, 181800),
# ('AIG', 71.38, '6/11/2007', '9:36am', -0.15, 195500),
# ('AXP', 62.58, '6/11/2007', '9:36am', -0.46, 935000)
# ]
# with open('E:/stocks.csv', 'w', newline='') as f:
# f_csv = csv.writer(f)
# f_csv.writerow(headers)
# f_csv.writerows(rows)

rows = [
{'Symbol':'AA', 'Price':39.48, 'Date':'6/11/2007',
'Time':'9:36am', 'Change':-0.18, 'Volume':181800},
{'Symbol':'AIG', 'Price': 71.38, 'Date':'6/11/2007',
'Time':'9:36am', 'Change':-0.15, 'Volume': 195500},
{'Symbol':'AXP', 'Price': 62.58, 'Date':'6/11/2007',
'Time':'9:36am', 'Change':-0.46, 'Volume': 935000}
]
# with open('E:/1.csv', 'w', newline='') as f:
# f_csv = csv.DictWriter(f, headers)
# f_csv.writeheader()
# f_csv.writerows(rows)

# 读写json数据
import json

data = {
'name':'qf',
'shares':100,
'price':542.23
}

# 将一个Python 数据结构转换为JSON
json_str = json.dumps(data)
print(json_str)
# 将一个JSON 编码的字符串转换回一个Python 数据结构
data_dict = json.loads(json_str)
print(data_dict)
# 如果要处理的是文件而不是字符串,你可以使用json.dump() 和json.load()来编码和解码JSON 数据
with open('data.json', 'w') as f:
json.dump(data, f)
with open('data.json', 'r') as f:
data = json.load(f)

# pprint 模块的pprint() 函数
# 按照key 的字母顺序并以一种更加美观的方式输出
print(data)
from pprint import pprint
pprint(data)

# 将一个JSON 字典转换为一个Python 对象例子
s = '{"name": "ACME", "shares": 50, "price": 490.1}'
class JSONObject:
def __init__(self, d):
self.__dict__ = d

data1 = json.loads(s, object_hook=JSONObject)
print(data1.name, data1.price)
print(json.dumps(data, indent=4))

# 从一个简单的XML 文档中提取数据
# 可以使用xml.etree.ElementTree 模块从简单的XML 文档中提取数据
from xml.etree.ElementTree import parse

# doc = parse('somefile.xml')
# for item in doc.iterfind('channel/item'):
# title = item.findtext('title')
# print(title)

# ElementTree 模块中的每个元素有一些重要的属性和方法,在解析的时候非常有用。
# tag 属性包含了标签的名字,text 属性包含了内部的文本,而get() 方法能获取属性值

# e = doc.find('channel/item')
# print(e.tag)
# print(e.text)
# print(e.get('some_attribute'))

# 使用尽可能少的内存从一个超大的XML 文档中提取数据
# 任何时候只要遇到增量式的数据处理时,第一时间就应该想到迭代器和生成器
from xml.etree.ElementTree import iterparse
# 使用一个Python 字典存储数据,并将它转换成XML 格式
from xml.etree.ElementTree import Element, tostring

def dict_to_xml(tag, d):
elem = Element(tag)
for key, val in d.items():
child = Element(key)
child.text = str(val)
elem.append(child)
return elem
s = {'name':'qf', 'shares':99, 'price':680.8}
e = dict_to_xml('stock', s)
# xml.etree.ElementTree 中的tostring() 函数很容易就能将它转换成一个字节字符串
print(tostring(e))
# 如果想给某个元素添加属性值,可以使用set() 方法
e.set('_id', '123')

# 与关系型数据库的交互
# 1.连接到数据库
# 2.创建一个游标
# 3.执行sql
# 类似SQLAlchemy 这样的库允许你使用Python 类来表示一个数据库表

# 编码和解码十六进制数
# 只是简单的解码或编码一个十六进制的原始字符串,可以使用 binascii 模块
import binascii
s = b'hello'
h = binascii.b2a_hex(s)
print(h)
hh = binascii.a2b_hex(h)
print(hh)

# 编码和解码base64数据
# 使用base64 模块中的两个函数 b64encode() 和 b64decode()
# Base64 编码仅仅用于面向字节的数据
import base64
a = base64.b64encode(s)
aa = base64.b64decode(a)
print(a, aa)

# 对于需要编码和解码二进制数据的程序而言,通常会使用struct 模块

# -----------------------------pandas 库------------------------------
# 数据的累加与统计操作
# 对于任何涉及到统计、时间序列以及其他相关技术的数据分析问题,都可以考虑使用Pandas 库
# Pandas 是一个拥有很多特性的大型函数库,我在这里不可能介绍完。但是只要你
#需要去分析大型数据集合、对数据分组、计算各种统计量或其他类似任务的话,这个
#函数库真的值得你去看一看




posted on 2018-02-09 16:37  我要的明天  阅读(236)  评论(0编辑  收藏  举报

导航