dbfpy在str上返回int()错误

时间:2012-05-31 19:26:51

标签: python excel dbf

我有一堆dbfs,我试图转换成xls。

在我的各种示例的测试文件中,事情是好的和好的,但是当应用于工作中的大讨厌文件时(使用"真实世界"示例),我的代码返回:

    Traceback (most recent call last):
      File "C:\...\final_sum _sw.py", line 73, in <module>
        dbf_xls(z, output_xls) #defined, reads dbf, writes xls
      File "C:\...\final_sum _sw.py", line 18, in dbf_xls
        sheet1.row(row).write(col, DBF[row][col])
      File "C:\Python26\ArcGIS10.0\lib\site-packages\dbfpy\dbf.py", line 242, in __getitem__
        return self.RecordClass.fromStream(self, self._fixIndex(index))
      File "C:\Python26\ArcGIS10.0\lib\site-packages\dbfpy\record.py", line 121, in fromStream
        return cls.fromString(dbf, cls.rawFromStream(dbf, index), index)
      File "C:\Python26\ArcGIS10.0\lib\site-packages\dbfpy\record.py", line 140, in fromString
        [_fd.decodeFromRecord(string) for _fd in dbf.header.fields])
      File "C:\Python26\ArcGIS10.0\lib\site-packages\dbfpy\fields.py", line 173, in decodeFromRecord
        return self.decodeValue(self.rawFromRecord(record))
      File "C:\Python26\ArcGIS10.0\lib\site-packages\dbfpy\fields.py", line 244, in decodeValue
        return int(value)
    ValueError: invalid literal for int() with base 10: '1 U'

表中的违规值= Cumula。面积为1.1未知材料类型。

其他文件在返回相同的号码,空格,字母&#39;时遇到同样的问题。格式或错误。

dbfpy将此字段读为&#39; c&#39;,但是是否存在关于小数的一些时间段,导致dbfpy将此值视为int()?无论如何都会强迫,欺骗模块将所有值视为严格的字符串值?

2 个答案:

答案 0 :(得分:0)

我没有使用dbfpy。您是否尝试过使用my dbf module?代码看起来像:

import dbf
table = dbf.Table(r'\path\to\dbf_file\filename')
table.open()

以后:

for row, record in enumerate(table):
    for col, value in enumerate(record):
        sheet1.row(row).write(col, value)

如果您有任何问题,请随时通过电子邮件与我联系。

答案 1 :(得分:0)

事实证明,所有字段都给我带来问题,其中长文本字段(字符长度为253-256)包含非ascii字符(度数符号,人们决定花时间插入的其他奇怪的东西)。 解决方案:

import codecs
blah_blah.encode("ascii", "ignore")

我可能用?或类似的东西替换了错误。