跳转到主要内容

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 字符串。

  • 提供 readerwriterDictReaderDictWriter

  • 支持使用文件、io.StringIO 等进行读写。

  • 拒绝使用 cStringIOStringIO.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 (14.0 kB 查看哈希值

上传时间 源代码

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面