用于读取和写入外部数据集的一致可迭代API
项目描述
wq.io 是一个用于消费(输入)、迭代和生成(输出)各种格式的外部数据资源的Python库。wq.io 促进了 wq框架 与其他系统和格式的互操作性。
wq.io 旨在可定制,具有一个 基类 和模块化混入类,用于处理 加载、解析 和 映射 外部数据到一个方便的API。
有些巧合的是,https://wq.io 也是描述wq框架整体的网站的URL。wq.io(网站)上的wq.io(库)文档可以在 https://wq.io/wq.io 查找。
入门
# Recommended: create virtual environment
# python3 -m venv venv
# . venv/bin/activate
# Install entire wq suite (recommended)
pip install wq
# Install only wq.io
pip install wq.io
# To enable wq.io's GIS support
pip install geopandas # includes Shapely & Fiona
# To enable wq.io's Excel write support
pip install xlwt # xls support
pip install xlsxwriter # xlsx support
# (xls/xlsx read support is enabled by default)
有关更多信息,请参阅 wq文档。
功能
wq.io 提供了一个通用的 API,用于加载、遍历和写入表格数据集。其基本思想是避免每次需要处理外部数据时都记住如 csv、xlrd 或 xml.etree 等库的独特用法。相反,wq.io 将这些库抽象为一个统一的接口,该接口作为一个 可迭代对象,包含 命名元组。尽可能的情况下,数据集的字段名称会自动从源文件中确定,例如 Excel 工作表的列标题。
from wq.io import ExcelFileIO
data = ExcelFileIO(filename='example.xls')
for row in data:
print(row.name, row.date)
wq.io 提供了多个内置类,如上所述,包括 CsvFileIO、XmlFileIO 和 JsonFileIO。还有一个方便的函数 load_file(),它会尝试自动确定对于给定的文件使用哪个类。
from wq.io import load_file
data = load_file('example.csv')
for row in data:
print(row.name, row.date)
所有包含的 *FileIO 类都支持读写外部文件,尽管 Excel 文件的写入支持需要额外的库(xlwt 和 xlsxwriter),这些库并未作为依赖项列出。
网络客户端
wq.io 还提供了上述每个类的网络能力等效版本,以方便从第三方 Web 服务加载数据。
from wq.io import JsonNetIO
class WebServiceIO(JsonNetIO):
url = "http://example.com/api"
data = WebServiceIO(params={'type': 'all'})
for row in data:
print(row.timestamp, row.value)
内部使用强大的 requests 库通过 HTTP 加载数据。
Pandas 分析
当安装了 Pandas 后,wq.io 类上的 as_dataframe() 方法可以用来创建 DataFrame,从而提供更广泛的分析可能性。
instance = WebServiceIO(params={'type': 'all'})
df = instance.as_dataframe()
print(df.value.mean())
GIS 支持
当安装了 Fiona 和 Shapely 后,wq.io 还可以打开和创建 shapefile 以及其他 OGR 兼容的地理数据格式。
from wq.io import ShapeIO
data = ShapeIO(filename='sites.shp')
for id, site in data.items():
print(id, site.geometry.wkt)
扩展 wq.io
每个 IO 类由处理过程各个步骤的混合类(loaders、parsers 和 mappers)组成。通过扩展这些混合类或上面的预混合类,可以轻松地将 wq.io 扩展到支持任意格式。例如,climata 库 提供了一些自定义 IO 类的示例,用于加载气候和水文数据。