跳转到主要内容

Python 2/3 Unicode CSV兼容层

项目描述

Latest PyPI Version License Supported Python Versions Wheel

Build Codecov Readthedocs stable Readthedocs latest

csv23为Python 2和3提供了基于Unicode的Python 3 csv模块的API。应该在两种版本的Python下运行代码可以使用它来隐藏2和3之间的bytestext差异,并坚持使用较新的基于Unicode的接口。

它在所有地方使用默认编码utf-8

改进

csv23解决了stdlib csv模块中的以下错误

bpo-12178

如果你的数据包含字面转义字符,则使用escapechar时存在破坏性的往返操作(已在Python 3.10中修复)

bpo-31590

Python 2 下使用 escapechar 和嵌入换行符的循环返回问题(已在 Python 3.4 中修复,但没有回滚):生成警告

附加功能

该软件包还提供一些便利功能,例如 open_csv() 上下文管理器,用于以正确的模式打开 CSV 文件并返回一个 csv.readercsv.writer

>>> import csv23

>>> with csv23.open_csv('spam.csv') as reader:  # doctest: +SKIP
...     for row in reader:
...         print(', '.join(row))
Spam!, Spam!, Spam!'
Spam!, Lovely Spam!, Lovely Spam!'

Python 3 附加功能

对于要在调用代码中打开类似文件的对象的情况,例如直接读写二进制流(如由调用者控制的 ZIP 文件),read_csv()write_csv() 函数(仅在 Python 3 中可用)非常有用

>>> import io
>>> buf = io.BytesIO()

>>> import zipfile
>>> with zipfile.ZipFile(buf, 'w') as z, z.open('spam.csv', 'w') as f:
...     csv23.write_csv(f, [[1, None]], header=['spam', 'eggs'])
<zipfile...>

>>> buf.seek(0)
0

>>> with zipfile.ZipFile(buf) as z, z.open('spam.csv') as f:
...     csv23.read_csv(f, as_list=True)
[['spam', 'eggs'], ['1', '']]

csv23 在内部使用给定编码和 newline=''io.TextIOWrapper 包装字节流(请参阅 csv 模块的 文档)。

write_csv()-函数还支持使用 .update(<bytes>) 方法更新对象,如 hashlib.new() 实例,这允许在将给定的行写入磁盘之前计算从生成的二进制 CSV 文件输出中产生的校验和(注意,返回的是对象)

>>> import hashlib

>>> csv23.write_csv(hashlib.new('sha256'), [[1, None]], header=['spam', 'eggs']).hexdigest()
'aed6871f9ca7c047eb55a569e8337af03fee508521b5ddfe7ad0ad1e1139980a'

这两个函数都有一个可选的 autocompress 参数:将其设置为 True,如果文件参数是以 '.bz2''.gz''.xz' 结尾的路径,则透明地压缩(或解压缩)。

安装

此软件包在 Python 2.7 和 3.7+ 下运行,使用 pip 进行安装

$ pip install csv23

另请参阅

许可证

此软件包在 MIT 许可证 下分发。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。

源代码分发

csv23-0.3.4.zip (42.6 kB 查看散列值

上传时间

构建分发

csv23-0.3.4-py2.py3-none-any.whl (18.5 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持