将csv转换为具有预定义架构的字典。
collective.csv2dict的Python项目详细描述
内容
Documentation
What is this?
这个包定义基类BaseCSVReader和 BaseMultilineCSVReader。这些可用于在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文件转换为字典。那么 您可能会为此中的每个项创建一个内容项或一个成员 或者你想用它做什么就用它。
Changelog
1.1 (2014-04-11)
- 允许忽略额外的列。使用这个:初始化 带ignore_extra_columns=True的读取器。 [毛里塔尼亚]
- 向读取器添加formatting方法。它当前返回分隔符、方言实例、编码和预期的 列数。你可以用这个在上传中给出提示 形式。 [毛里塔尼亚]
1.0 (2012-06-21)
- 初次发行 [毛里塔尼亚]