2016-07-17 1 views
0

Я действительно запутался в части sqlite, где я распечатываю свою базу данных, потому что я продолжаю получать «u» в начале каждой строки, это doesn «есть», хотя, я полагаю, не принимается как строка? Это происходит только в этой программе (я тестировал ее и на другой).'u' в начале вывода (Sqlite, Python)

Я проверил код много раз (он не появляется в базе данных, когда я открываю его с «SQLite браузер базы данных»)

Так это код:

#!/usr/bin/python 

import sqlite3 
import os 

def list_n_convert(way): 
    if way == 'mov':#movie search 
     output = os.popen("find '/home/fugo/' -name '*.mp4' -printf '%f\n'").read() 
    word = '' 
    lyst = [] 
    for letter in output: 
     if letter != '\n': 
      word += str(letter) 
     else: 
      lyst.append(word) 
      word = '' 
    return lyst 

#Loop to create entries 
def entry_maker(lyst, column): 
    for count in range(len(lyst)): 
     cur.execute("INSERT OR IGNORE INTO myliltable ({}) VALUES (?)".format(column), (lyst[count],)) 
     con.commit() 

if __name__ == '__main__': 

    #necessities for start-up of sql-lite 
    con = sqlite3.connect('movie.db') 
    cur = con.cursor() 

    #Create a table, if it's non-existent 
    cur.execute('CREATE TABLE IF NOT EXISTS myliltable (name TEXT PRIMARY KEY, cover TEXT, genre TEXT)') 

    entry_maker(list_n_convert('mov'), 'name') 

    cur.execute('SELECT * FROM myliltable') 
    for row in cur.fetchall(): 
     print(row) #print each row in a line <--- 'ERROR' happens here 

    cur.close() 
    con.close() 

Это то, что вывод выглядит следующим образом:

(u'Umbra.mp4', None, None) 
(u'xd.mp4', None, None) 
(u'Nice.mp4', None, None) 
(u'Haha.mp4', None, None) 

Я объясню, что делает программа, может быть, это поможет найти ошибку:

Первая функция «list_n_convert» выполняет поиск в моей домашней папке для любых файлов с окончанием «.mp4», а затем преобразует результат поиска в строки и добавляет их в список.

Вторая запись в базу данных для каждого элемента в списке (каждый файл mp4). В конце я вызываю функции, и каждая строка распечатывается; здесь происходит ошибка.

+0

Петля в 'list_n_convert' очень окольным способом повторного внедрения' Lyst = output.splitlines() ':-) –

+0

Что вы видите это представление а * tuple *, а внутри этого кортежа первый элемент является строкой unicode. Распечатайте каждый элемент кортежа отдельно, и вы больше не увидите префикс 'u'. Например, попробуйте использовать 'print (row [0])'. – Evert

+1

В любом случае вы видите представление 'repr()' для строковых объектов Unicode * в кортеже. Это * полностью нормальное поведение *. Префикс 'u' предназначен для указания точного типа объекта, а также делает его round-trippable; вы можете скопировать эту целую строку с префиксом 'u' в скрипт или интерпретатор Python для воспроизведения точного значения. –

ответ

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