代码这样的:
def insertData(db,usr,passwd,values):
#插入数据库。INSERT INTO films VALUES
#('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes');
conn = psycopg2.connect(database=db, user=usr, password=passwd)
print(conn)
cur = conn.cursor()
try:
cur.execute("insert into films values(values)")
except:
print("Failed!")
conn.commit()
cur.close()
conn.close()
def errData(fp):#逐行拆分字段,拼成 string 插入数据库。
print("开始处理存在乱码的数据!%s"%fp)
values = []
with open(fp) as fh:
for line in fh:
print(line.strip('\n'))
print(line.strip('\n').split('|'))
for f in line.strip('\n').split('|'):
print(chardet.detect(f))
try:
if(chardet.detect(f)['encoding'] in ['ascii','none','GB2312','GBK','Big5','GB18030']):
print(f.decode(chardet.detect(f)))
print(f.decode(chardet.detect(f)['encoding']).encode('utf-8'))
else:
print(f.decode('utf-8').encode('utf-8'))
except:
print(f.encode('utf-8'))
return values
想请教一下,insertData 插入数据这块,在 errData 里面怎么把 list 转换成 insert 语句的格式呢? errData 这里,V 友给了不少建议。但是我自己写的比较复杂,因为基本上就是中文编码,最大概率的是 utf-8,少数害群之马是其他的中文编码或者 ascii。但是会爆这么个错,说是 object 不应该是个 str,可是先去掉换行符,一定会变成 string 吧。在 python2.7 就没发现这个错。
Traceback (most recent call last):
File "./test.py", line 116, in <module>
errData(fp)
File "./test.py", line 85, in errData
print(chardet.detect(f))
File "/opt/anaconda3/lib/python3.6/site-packages/chardet/__init__.py", line 34, in detect
'{0}'.format(type(byte_str)))
TypeError: Expected object of type bytes or bytearray, got: <class 'str'>
请大神指点指点
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.