使用pkgutil.get_data读取csv(文本)文件

时间:2014-05-20 01:39:47

标签: csv python-3.x

所以我正在编写一些需要从CSV文件中提取配置/数据的代码,这些文件与应用程序一起打包。根据我的理解,使用pkgutil是“正确”的方法。所以我要做的是:

import pkgutil
MatFile = pkgutil.get_data('impy.implosions', 'LILAC_Materials.csv')

工作正常,并给我文件的字节。但我无法弄清楚如何以干净的方式将其提供给csv.reader。我找到了这个old question,但它的解决方案是:

MatFile = io.StringIO(MatFile)
dataReader = csv.reader(MatFile , delimiter=',')

这不起作用,因为StringIO期望str。 io中的补充功能将为BytesIO,但由于csv.reader无法处理,因此对我没有帮助。看起来这应该有一个简单的解决方案,但我不熟悉在python中处理字节数据。谢谢!

1 个答案:

答案 0 :(得分:2)

在Python 3中,csv模块的类希望您传递一个产生Unicode字符串的迭代。如果您将数据作为单字节字符串,则首先需要对数据进行解码,然后将其拆分为行。

这里有一些应该有效的代码:

MatFile = pkgutil.get_data('impy.implosions', 'LILAC_Materials.csv')
dataReader = csv.reader(MatFile.decode('utf-8').splitlines(), delimiter=',')

我猜测该文件是用UTF-8(或ASCII,它是一个子集)编码的。如果您知道在decode调用中交换了适当的编码。 str.splitlines负责将单个字符串拆分为一个行列表,这完全可以作为csv.reader的输入。