解析各类文件--cookbook读书笔记

1. CSV 数据

使用csv 库

import csv
with open('stocks.csv') as f:
    f_csv = csv.reader(f)
    headers = next(f_csv)
    for row in f_csv:
        # Process row
        ...
with open('stocks.csv') as f:
    f_csv = csv.DictReader(f)
    for row in f_csv:
        # process row
        ...

2. JSON 数据

json 模块提供了一种很简单的方式来编码和解码JSON 数据

import json
data = {
    'name' : 'ACME',
    'shares' : 100,
    'price' : 542.23
}
json_str = json.dumps(data)
data = json.loads(json_str)
# Writing JSON data
with open('data.json', 'w') as f:
    json.dump(data, f)
# Reading data back
with open('data.json', 'r') as f:
    data = json.load(f)

3. XML 数据

可以使用xml.etree.ElementTree 模块从简单的XML 文档中提取数据。

from urllib.request import urlopen
from xml.etree.ElementTree import parse
# Download the RSS feed and parse it
u = urlopen('http://planet.python.org/rss20.xml')
doc = parse(u)
# Extract and output tags of interest
for item in doc.iterfind('channel/item'):
    title = item.findtext('title')
    date = item.findtext('pubDate')
    link = item.findtext('link')
    print(title)
    print(date)
    print(link)
    print()
增量式解析大型XML 文件

iterparse() 方法允许对XML 文档进行增量操作。使用时,你需要提供文件名和一个包含下面一种或多种类型的事件列表: start , end, start-ns 和end-ns 。由iterparse() 创建的迭代器会产生形如(event, elem) 的元组,其中event 是上述事件列表中的某一个,而elem 是相应的XML 元素。

尽管xml.etree.ElementTree 库通常用来做解析工作,其实它也可以创建XML文档。from xml.etree.ElementTree import Element,from xml.etree.ElementTree import tostring

4. Base64 数据

base64 模块中有两个函数b64encode() and b64decode() 可以做到编码解码。

>>> # Some byte data
>>> s = b'hello'
>>> import base64
>>> # Encode as Base64
>>> a = base64.b64encode(s)
>>> a
b'aGVsbG8='
>>> # Decode from Base64
>>> base64.b64decode(a)
b'hello'

5. 二进制数组数据

可以使用struct 模块处理二进制数据。

>>> from struct import Struct
>>> record_struct = Struct('<idd')
>>> record_struct.size
20
>>> record_struct.pack(1, 2.0, 3.0)
b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x08@'
>>> record_struct.unpack(_)
(1, 2.0, 3.0)
如果你的程序需要处理大量的二进制数据,你最好使用numpy 模块。你可以将一个二进制数据读取到一个结构化数组中而不是一个元组列表中。

6. 数据的累加与统计操作

对于任何涉及到统计、时间序列以及其他相关技术的数据分析问题,都可以考虑使用Pandas 库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值