Python DBF编码cp1250
我的dbf数据库编码为cp1250,我正在使用以下代码读取该数据库:Python DBF编码cp1250,python,database,encoding,anaconda,dbf,Python,Database,Encoding,Anaconda,Dbf,我的dbf数据库编码为cp1250,我正在使用以下代码读取该数据库: import csv from dbfpy import dbf import os import sys filename = sys.argv[1] if filename.endswith('.dbf'): print "Converting %s to csv" % filename csv_fn = filename[:-4]+ ".csv" with open(csv_fn,'wb') a
import csv
from dbfpy import dbf
import os
import sys
filename = sys.argv[1]
if filename.endswith('.dbf'):
print "Converting %s to csv" % filename
csv_fn = filename[:-4]+ ".csv"
with open(csv_fn,'wb') as csvfile:
in_db = dbf.Dbf(filename)
out_csv = csv.writer(csvfile)
names = []
for field in in_db.header.fields:
names.append(field.name)
#out_csv.writerow(names)
for rec in in_db:
out_csv.writerow(rec.fieldData)
in_db.close()
print "Done..."
else:
print "Filename does not end with .dbf"
问题是,最终的csv文件是错误的。文件编码为ANSI,某些字符已损坏。我想问你,如果你能帮助我如何正确阅读dbf文件
编辑1
我尝试了来自的不同代码,出现了一些错误
资料来源2:
from simpledbf import Dbf5
import os
import sys
dbf = Dbf5('test.dbf', codec='cp1250');
dbf.to_csv('junk.csv');
输出:
python program2.py
Traceback (most recent call last):
File "program2.py", line 5, in <module>
dbf = Dbf5('test.dbf', codec='cp1250');
File "D:\ProgramFiles\Anaconda\lib\site-packages\simpledbf\simpledbf.py", line 557, in __init__
assert terminator == b'\r'
pythonProgram2.py
回溯(最近一次呼叫最后一次):
文件“program2.py”,第5行,在
dbf=Dbf5('test.dbf',codec='cp1250');
文件“D:\ProgramFiles\Anaconda\lib\site packages\simpledbf\simpledbf.py”,第557行,在\uuu init中__
断言终止符==b'\r'
断言者
我真的不知道如何解决这个问题。尝试使用:
我写了simpledbf。导致您出现问题的原因是我在开发模块时进行的一些测试。首先,您可能需要更新安装,因为0.2.6是最新版本。然后,您可以尝试从文件“D:\ProgramFiles\Anaconda\lib\site packages\simpledbf\simpledbf.py”中删除该特定行(#557)。如果这不起作用,你可以打电话给我,或者你可以试试Ethan关于dbf模块的建议。你可以根据需要解码和编码
dbfpy
假设字符串是utf8
编码的,因此您可以解码,因为它不是该编码,然后使用正确的编码再次编码
import csv
from dbfpy import dbf
import os
import sys
filename = sys.argv[1]
if filename.endswith('.dbf'):
print "Converting %s to csv" % filename
csv_fn = filename[:-4]+ ".csv"
with open(csv_fn,'wb') as csvfile:
in_db = dbf.Dbf(filename)
out_csv = csv.writer(csvfile)
names = []
for field in in_db.header.fields:
names.append(field.name)
#out_csv.writerow(names)
for rec in in_db:
row = [i.decode('utf8').encode('cp1250') if isinstance(i, str) else i for i in rec.fieldData]
out_csv.writerow(rec.fieldData)
in_db.close()
print "Done..."
else:
print "Filename does not end with .dbf"
它也有效。谢谢你的回答。:)空字段上出现错误。“ValueError:列类型”尚不受支持
import csv
from dbfpy import dbf
import os
import sys
filename = sys.argv[1]
if filename.endswith('.dbf'):
print "Converting %s to csv" % filename
csv_fn = filename[:-4]+ ".csv"
with open(csv_fn,'wb') as csvfile:
in_db = dbf.Dbf(filename)
out_csv = csv.writer(csvfile)
names = []
for field in in_db.header.fields:
names.append(field.name)
#out_csv.writerow(names)
for rec in in_db:
row = [i.decode('utf8').encode('cp1250') if isinstance(i, str) else i for i in rec.fieldData]
out_csv.writerow(rec.fieldData)
in_db.close()
print "Done..."
else:
print "Filename does not end with .dbf"