将csv转换为具有预定义架构的字典。

collective.csv2dict的Python项目详细描述


Documentation

What is this?

这个包定义基类BaseCSVReaderBaseMultilineCSVReader。这些可用于在csv上迭代 归档并将其内容作为字典返回。通常你应该使用 BaseCSVReader。可以使用BaseMultilineCSVReader。 当您遇到csv文件的问题时 列中的字符,这可能会使标准读取器出错。

Example usage

您应该编写一个自己的类,该类继承自一个基类 上课。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}

Notes

  • 建议始终以通用换行模式打开文件。 这通常是避免 单行内的换行符。

  • 基本读取器尝试猜测 简单化的方式,当没有好的编码 找到了。

  • 读卡器可能会忽略csv文件的第一行,因为它可能是 头球。我们对此做一个简单的检查:如果 第一行可以变成整数,那么它不是头 行,它将被视为数据。如果这个逻辑不起作用 对于您,然后重写您自己类中的is_header方法, 就像这样:

    def is_header(self, items):
        return False
    

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

  • 如果需要,可以重写prepare_iterable方法 在 读者开始处理它。BaseMultilineCSVReader有一个 这方面的例子。

  • 默认情况下,使用excel csv方言(或任何python语言 版本为默认值)。如果你想用一种特定的方言,你 可以重写reader类中的dialect变量。为了 例如,可以使用制表符作为分隔符,如下所示:

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

Compatibility

我已经在Python2.6和2.4的早期版本上尝试过。它 可能在2.3以后的所有2.x版本上都可以工作。

在mac os x上测试过,很可能也在任何类unix系统上工作。 也应该在windows上工作,不过我可以想象newline的问题 一些角落里的人物。

Note for Plone users

我通常做包装用在plone上,但这个可以用 用普通的Python。不过,plone用户的注意事项可能是 很好。

如果你想在你的plone构建中使用它,只需将它添加到 你的buildout.cfg里有鸡蛋。您不需要加载zcml或安装 什么都行。您只需编写自己的类定义,如 上面的例子。然后你可能想写一个浏览器视图 使用此类将一些上载的csv文件转换为字典。那么 您可能会为此中的每个项创建一个内容项或一个成员 或者你想用它做什么就用它。

Authors

  • Maurits van Rees(包创建、各种改进和 概括)
  • Guido Wesdorp(初始代码,2007年为客户端编写)

Changelog

1.1 (2014-04-11)

  • 允许忽略额外的列。使用这个:初始化 带ignore_extra_columns=True的读取器。 [毛里塔尼亚]
  • 向读取器添加formatting方法。它当前返回分隔符、方言实例、编码和预期的 列数。你可以用这个在上传中给出提示 形式。 [毛里塔尼亚]

1.0 (2012-06-21)

  • 初次发行 [毛里塔尼亚]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java HikariCP连接池Tomcat调试启用   java如何在javascript中访问JSON数组的元素?   jasper使用HttpServlet报告Java空白PDF   用于存储海量数据的java最佳集合   JBPM&springboot组织。流口水。坚持不懈jta。JtaTransactionManager在JNDI位置[java:comp/UserTransaction]未找到任何UserTransaction   java Grails maven插件需要Groovy 2.4.2   获取列表中访问最少的元素(Java 8)   java在IntelliJ中下载cn1lib不起作用   java Akka构造函数通过spring进行布线   swing在Java中创建JList时,如何更改条目的背景颜色?   为什么Java8Lambda允许访问非最终类变量?   javajavax。邮政MessaginException:无法连接到SMTP主机   java Android Webview高度在滚动后增加