跳转到主要内容

将CSV转换为具有预定义模式的字典。

项目描述

文档

这是什么?

此包定义了基本类 BaseCSVReaderBaseMultilineCSVReader。这些类可以用来遍历CSV文件并返回其内容作为字典。通常您应该使用 BaseCSVReader。当您遇到具有列中换行符的CSV文件的问题时,可以使用 BaseMultilineCSVReader,这可能会使标准读取器出错。

示例用法

您应该编写一个从这些基本类之一继承的自定义类。 example.py 文件有一个示例。基本上它将是这样的

from collective.csv2dict import BaseCSVReader, to_int, to_string

class ExampleCSVReader(BaseCSVReader):
    """Example csv reader class.

    We read three columns and skip one.
    """
    skip = [2]  # skip column index 2
    fields = [
        # The format is: (field name, filter method)
        ('id', to_int),
        ('fullname', to_string),
        ('email', to_string),
    ]

然后您可以使用此类来读取CSV文件。 example.py 文件再次提供了读取CSV文件和一些命令行选项的示例代码。简而言之,它归结为以下内容

c = reader(open(filename, 'U'))
# Iterate over the entries and print them.
for entry in c:
    print entry
print '%d entries ignored due to errors.' % c.ignored
print '%d entries read without errors.' % c.success

它将把这个CSV(位于 example.csv 中)

1,Maurits van Rees,ignored,maurits@example.org
2,Arthur Dent,ignored again,dentarthurdent@example.org

转换成这个字典

{'email': u'maurits@example.org',
 'fullname': u'Maurits van Rees',
 'id': 1}
{'email': u'dentarthurdent@example.org',
 'fullname': u'Arthur Dent',
 'id': 2}

注释

  • 建议始终以通用换行模式打开文件。这通常是避免单行中换行符的一些潜在问题的最佳方式。

  • 基本读取器会以简单的方式尝试猜测文件的编码,并在找不到良好编码时避免破坏。

  • 读者可能会忽略csv文件的第一行,因为它可能是标题行。我们对此进行简单检查:如果第一行的任何列都不能转换为整数,则它不是标题行,将被视为数据。如果这个逻辑对您不起作用,那么只需像这样覆盖您自己类中的is_header方法

    def is_header(self, items):
        return False

    这将确保第一行始终被视为数据。如果您希望它始终被视为标题,只需执行return True

  • 如果需要在读取器开始处理之前对某些行或整个csv文件进行一些修复,可以覆盖prepare_iterable方法。BaseMultilineCSVReader为此提供了一个示例。

  • 默认情况下使用Excel csv方言(或Python版本中作为默认值的任何方言)。如果您想使用特定的方言,可以覆盖读取器类中的dialect变量。例如,您可以使用制表符作为分隔符,如下所示

    import csv
    
    class MyDialect(csv.excel):
        delimiter = '\t'
    
    csv.register_dialect('mydialect', MyDialect)
    
    class ExampleCSVReader(BaseCSVReader):
        dialect = 'mydialect'
        fields = [...]

兼容性

我曾在Python 2.6及其之前版本2.4上尝试过。它可能在2.3及以后的2.x版本上都能工作。

在Mac OS X上进行了测试,因此可能在任何类Unix系统上也能工作。尽管如此,我想象到在一些角落案例中可能存在关于换行符的问题。

Plone用户注意

我通常为Plone制作软件包,但这个软件包可以用纯Python使用。尽管如此,对于Plone用户来说,一个注意事项可能是个好主意。

如果您想在Plone构建中用它,只需将其添加到buildout.cfg中的eggs即可。您不需要加载zcml或安装任何东西。您只需要像上面示例中那样编写自己的类定义。然后您可能想编写一个浏览器视图,使用这个类将某些上传的csv文件转换为字典。然后您可能为这个字典中的每个条目创建一个内容项或成员,或者对其进行任何您想要的操作。

作者

  • 毛里茨·范·里斯(软件包创建、各种改进和通用化)

  • 吉多·韦斯多普(初始代码,为2007年的客户编写)

变更日志

1.1 (2014-04-11)

  • 可选地允许忽略额外的列。要使用此功能:用ignore_extra_columns=True初始化读取器。[毛里茨]

  • 为读取器添加formatting方法。它当前返回分隔符、方言实例、编码和预期的列数。您可以使用此功能在上传表单中提供提示。[毛里茨]

1.0 (2012-06-21)

  • 初始发布[毛里茨]

项目详情


下载文件

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

源分发

collective.csv2dict-1.1.zip (24.3 kB 查看散列)

上传时间

由以下组织支持

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