Tôi có cơ sở dữ liệu dbf mã hóa trong cp1250 và tôi đọc cơ sở dữ liệu này sử dụng mã folowing:DBF - mã hóa 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') 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"
Vấn đề là, rằng tập tin csv thức là sai. Mã hóa tệp là ANSI và một số ký tự bị hỏng. Tôi muốn hỏi bạn, nếu bạn có thể giúp tôi làm thế nào để đọc tập tin dbf một cách chính xác.
EDIT 1
Tôi đã thử mã khác nhau từ https://pypi.python.org/pypi/simpledbf/0.2.4, có một số lỗi.
Nguồn 2:
from simpledbf import Dbf5
import os
import sys
dbf = Dbf5('test.dbf', codec='cp1250');
dbf.to_csv('junk.csv');
Output:
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'
AssertionError
tôi thực sự không biết làm thế nào để giải quyết vấn đề này.
Nó cũng hoạt động. Cảm ơn về câu trả lời. :) Chỉ có lỗi trên trường trống. "ValueError: Loại cột" "chưa được hỗ trợ." – Krivers