我有一堆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()?无论如何都会强迫,欺骗模块将所有值视为严格的字符串值?
答案 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")
我可能用?或类似的东西替换了错误。