DBF导入Charmap错误Python



我还有一个关于导入的问题,但我遇到了另一个问题。我正试图从DBF文件导入数据,虽然大多数DBF文件都可以工作,但我遇到了一个文件,它给了我以下错误,

"C:Program FilesAnaconda2python.exe" D:/Projects/DBFImport/DBFImporter/extractdbf.py
Traceback (most recent call last):
File "D:/Projects/DBFImport/DBFImporter/extractdbf.py", line 17, in <module>
for record in table.records:
File "C:Program FilesAnaconda2libsite-packagesdbfreaddbf.py", line 316, in _iter_records
for field in self.fields]
File "C:Program FilesAnaconda2libsite-packagesdbfreadfield_parser.py", line 79, in parse
return func(field, data)
File "C:Program FilesAnaconda2libsite-packagesdbfreadfield_parser.py", line 157, in parseM
return self.decode_text(memo)
File "C:Program FilesAnaconda2libsite-packagesdbfreadfield_parser.py", line 45, in decode_text
return decode_text(text, self.encoding, errors=self.char_decode_errors)
File "C:Program FilesAnaconda2libencodingscp1252.py", line 15, in decode
return codecs.charmap_decode(input,errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 278: character maps to <undefined>

这是代码,它非常简单,便于分析,

import pyodbc, os, string
from dbfread import DBF
# SQL Server Connection Test
cnxn = pyodbc.connect('DRIVER={SQLServer};SERVER=***********;DATABASE=TEST_DBFIMPORT;UID=test;PWD=test')
cursor = cnxn.cursor()
table = DBF('E:\Backups\imp.dbf', lowernames=True)
for record in table.records:
rec1 = record['id']
cursor.execute ("insert into imp(ID) values(?)", rec1)
cnxn.commit()

我试过各种解码,但似乎都不起作用。

更新1:

<type 'tuple'>: (<type 'exceptions.UnicodeDecodeError'>, UnicodeDecodeError('charmap', 'Firearms as appraised on May 18, 2011. F.I.E (Firearms Import Export Co.) .26 automatic pistol S/N # AS21212 ----------------- $175.00 Walther (Smith & Wesson) P22, 22LR semi automatic pistol S/N # N052010 -------------- $325.00 Taurus .357 Magnum Model 608 revolver, blue,, 4xe2x80x9d vent rib barrel S/N # LF632765 ------------ $375.00 Colt MKII Series 70 semi automatic pistol, 9mm, blue, pacmeyer grips, S/N # 70S49671 -------- $475.00 Ruger Model 10/22 semi-automatic carbine, 22LR, S/N # 126-90774 ----- $200.00', 278, 279, 'character maps to <undefined>'), None)

您得到错误是因为有几个代码点(我认为有三个)没有unicode映射——它们只是空白的。

使用我的dbf库,您通常会将文件打开为:

table = dbf.Table('e:/Backups/imp.dbf')  # forward slash and backslash both work

您可以通过打印表格来查看表格本身指定的文件编码:

print table

要覆盖表本身中指定的编码:

table = dbf.Table('e:/Backups/imp.dbf', codepage='...')

如果没有其他方法,你可以尝试在代码页中使用'utf8'——它不是dbf规范的一部分,但可能会有所帮助(我添加它是为了自己使用,所以没有任何保证/保证等)

最新更新