将CSV转换为具有预定义模式的字典。
项目描述
文档
这是什么?
此包定义了基本类 BaseCSVReader 和 BaseMultilineCSVReader。这些类可以用来遍历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文件转换为字典。然后您可能为这个字典中的每个条目创建一个内容项或成员,或者对其进行任何您想要的操作。
变更日志
1.1 (2014-04-11)
可选地允许忽略额外的列。要使用此功能:用ignore_extra_columns=True初始化读取器。[毛里茨]
为读取器添加formatting方法。它当前返回分隔符、方言实例、编码和预期的列数。您可以使用此功能在上传表单中提供提示。[毛里茨]
1.0 (2012-06-21)
初始发布[毛里茨]
项目详情
collective.csv2dict-1.1.zip的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | b953d57e5ca3afcdec9793231d66bb92242875348d615d2b290dce6700218e69 |
|
MD5 | de31d914e764ade56969cbf76b228e46 |
|
BLAKE2b-256 | ca1821b9d976478a9d4b88a8a05980f7d715503876a5e6ea574866e9f1432bdc |