Python 2的类似CSV模块
项目描述
csv342是一个类似于Python标准库中csv模块的Python模块。在Python 3下,它直接调用标准csv模块。在Python 2下,它提供了一种类似Python 3的接口来读取和写入CSV文件,特别是关于非ASCII字符。
它遵循BSD许可证发布。源代码可在https://github.com/roskakori/csv342获取。
安装
要安装,只需运行
$ pip install --upgrade csv342
或者您也可以从http://pypi.python.org/pypi/csv342/下载发行版存档,解压它并将csv342.py复制到您的应用程序路径中。
示例
首先,考虑在Python 2下将源代码中的所有字符串字面量从str更改为unicode,以避免混乱的u字符串前缀。
>>> from __future__ import unicode_literals
以下示例假设您已经这样做,使Python 2代码看起来更像Python 3。
一旦您使用
>>> import csv342 as csv
导入csv342
>>> import io >>> csv_stream = io.StringIO() >>> csv_writer = csv.writer(csv_stream) >>> csv_writer.writerow(['a', 'b']) >>> csv_writer.writerow(['1', '"x"']) >>> csv_content = csv_stream.getvalue() >>> str(csv_content) 'a,b\r\n1,"""x"""\r\n'
您的代码可以以相同的方式调用CSV函数,无论它在Python 2还是Python 3下运行。首先,让我们将一些测试数据写入io.StringIO
>>> csv_stream = io.StringIO('a,b\r\n1,"""x"""\r\n') >>> csv_reader = csv.reader(csv_stream) >>> for row in csv_reader: >>> print(row)
要从io.StringIO读取数据,使用
>>> csv_path = os.path.join('test', 'utf-8.csv') >>> with io.open(csv_path, encoding='utf-8', newline='') as csv_file: >>> csv_reader = csv.reader(csv_file, delimiter=',') >>> for row in csv_reader: >>> print('row {0:d}: data={1}'.format(csv_reader.line_num, row))
要读取带有非ASCII字符的UTF-8编码CSV文件,使用
支持 Python 2 的 unicode 字符串。
提供 reader、writer、DictReader 和 DictWriter。
支持使用文件、io.StringIO 等进行读写。
拒绝使用 cStringIO 或 StringIO.StringIO(实际上并不适用于 unicode);请使用 io.StringIO。
限制
所有标准 csv 模块的限制都适用。
在 Python 2 中使用标准 csv.Sniffer。
需要 Python 2.6 或更高版本。
性能
使用 Python 2 的 csv342 处理 CSV 文件大约比 Python 3 慢 30%。这可能是由于在 Python 2 中,有一个中间转换到 UTF-8 的步骤,使用的是纯 Python 代码,而 Python 3 则主要使用原生代码。
如果您在同一台机器上安装了 Python 2 和 3,您可以通过以下方式自行测试:
python3 test/performance.py python2 test/performance.py
在一台装有核心 2 代英特尔 CPU 的旧笔记本电脑和 Ubuntu 14.04 上,这分别需要 10.2 秒和 13.6 秒。
许可证
版权(c)2016-2020,Thomas Aglassinger。版权所有。
在 BSD 许可下分发。有关更多信息,请参阅 LICENSE.txt。
版本历史
版本 1.0.1,2020-05-05
修复了 setup.py 中的不一致许可信息(由 Stephen DiCato 贡献)。
版本 1.0.0,2018-04-02
修复了 DictReader,使其现在可以从行列表中读取(由 Lucas Wiman 贡献)。
修复了 StringIO 测试中的 AttributeError(由 Lucas Wiman 贡献)。
版本 0.2,2016-04-17
修复了在 Python 3 下运行时的版本号。
修复了始终为 False 的辅助常量 IS_PYHTON2。
添加了 Python 2 的 csv 模块中的剩余符号。
版本 0.1,2016-04-16
首次发布。
项目详情
csv342-1.0.1.zip 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 232a6c42f8e6a24b0c461319ccc0b5a392834fda4850244fcbddc97937ede027 |
|
MD5 | 5d371bb0e89399e768890d99df6ca2da |
|
BLAKE2b-256 | eaa1fb5743484af7a86e1c41f398aac2885a7ec6f82260e353483b564efcf1a4 |