我仍在学习Python,作为一个小项目,我编写了一个脚本,它将获取我在文本文件中的值并将它们插入sqlite3数据库但是有些名字有奇怪的字母(我猜你会叫它们非ASCII),当它们出现时会产生一个错误这是我的小剧本(请告诉我是否还有更像是蟒蛇的剧本):
导入sqlite3
f = open('complete', 'r')
fList = f.readlines()
conn = sqlite3.connect('tpb')
cur = conn.cursor()
for i in fList:
exploaded = i.split('|')
eList = (
(exploaded[1], exploaded[5])
)
cur.execute('INSERT INTO magnets VALUES(?, ?)', eList)
conn.commit()
cur.close()
它会产生这个错误:
Traceback (most recent call last):
File "C:\Users\Admin\Desktop\sortinghat.py", line 13, in <module>
cur.execute('INSERT INTO magnets VALUES(?, ?)', eList)
sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a te
xt_factory that can interpret 8-bit bytestrings (like text_factory = str). It is
highly recommended that you instead just switch your application to Unicode str
ings.
最佳答案
要将文件内容转换为unicode,您需要从其中的任何编码进行解码。
看起来你是在Windows上,所以一个很好的选择是cp1252
。
如果你从别的地方拿到文件,所有的赌注都会被取消。
一旦对编码进行排序,解码的一个简单方法是使用codecs
模块,例如:
import codecs
# ...
with codecs.open('complete', encoding='cp1252') as fin: # or utf-8 or whatever
for line in fin:
to_insert = (line.split('|')[1], line.split('|')[5])
cur.execute('INSERT INTO magnets VALUES (?,?)', to_insert)
conn.commit()
# ...