2010-11-11 2 views
0

Я пытаюсь написать небольшой скрипт для написания таблицы sqlite из списка архивов, сохраненного в файле. код до сих пор это:Проблемы с кодированием в python x64

import os import _sqlite3 import sys 

print sys.path[0] mydir = sys.path[0] print (mydir) def listdir(mydir): 
    lis=[] 
    for root, dirs, files in os.walk(mydir): 
     for name in files: 
      lis.append(os.path.join(root,name)) 
    return lis 
    filename = "list.txt" print ("writting in %s" % filename) file = open(filename, 'w') for i in listdir(mydir): 
    file.write(i) 
    file.write("\n") file.close() 

con = 
_sqlite3.connect("%s/conection"%mydir) c=con.cursor() 

c.execute(''' drop table files ''') c.execute('create table files (name text, other text)') file = open(filename,'r') for line in file : 
    a = 1 
    for t in [("%s"%line, "%i"%a)]: 
     c.execute('insert into files values(?,?)',t) 
     a=a+1 c.execute('select * from files') print c.fetchall() con.commit() c.close() 

когда я бегу я получаю следующее:

Traceback (most recent call last): File "C:\Users\josh\FORGE.py", line 32, in <module> 
    c.execute('insert into files values(?,?)',t) ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings. 

i've пытался с юникода(), построенной в функции, но до сих пор won't работу, сказав, что он не может декодировать символ 0xed или что-то еще.

Я знаю, что проблема связана с кодировкой строк списка, но я не могу найти способ правильно их исправить. есть идеи? заранее спасибо!

+1

http://farmdev.com/talks/unicode/ –

ответ

1

(ноль). пожалуйста, переформатировать код

  1. после for line in file: сделать что-то вроде line = line.decode('encoding-of-the-file') с кодирования нечто вроде utf-8 или iso-8859-1 - вы должны знать ваш входной кодирующий

    Если вы не знаете, кодировку или не заботятся о чистом декодировании, вы можете догадаться о наиболее вероятной кодировке и сделать line.decode('uft-8', 'ignore'), опуская все символы, которые не подлежат декодированию. Кроме того, вы можете использовать 'replace', которая заменяет эти символы с «Unicode символом замены» (\ ufffd)

  2. использования внутри и во время общения с базой данных толькоunicode объектов, например u'this is unicode'

(3). Не используйте file в качестве имени переменной

также посмотреть здесь: Best Practices for Python UnicodeDecodeError

+0

line.decode решить проблему, спасибо! – Choice

+0

также, я изменил имя файла, полностью забыл о его сохранении, спасибо. – Choice

Смежные вопросы