2016-12-12 64 views
1

我有一個SQLite3數據庫,其中包含日語文本的句子和附加字符,稱爲furigana,它們有助於語音朗讀。在Python中處理來自SQLite3數據庫的文本

我有一個函數remove_furigana,它可以處理一個字符串並返回沒有furigana字符的字符串。但是,當我傳遞這個函數時,從我的數據庫中取出的句子似乎沒有任何效果。有人能爲我澄清這裏發生了什麼,並指出我的解決方案?

def remove_furigana(content): 
    furigana = False 
    expression = "" 
    for character in content: 
     if character == '[': 
      furigana = True 
     elif character == ']': 
      furigana = False 
     elif not furigana: 
      expression += character 
    return expression.replace(" ", "") 

def retrieve_article(): 
    c.execute('SELECT content FROM sentence WHERE article_id = "k10010770581000"') 
    for row in c.fetchall(): 
     print(remove_furigana(row)) 
+2

您正在傳遞它,而不是一個字。 'row'實際上是一個_tuple_。嘗試打印它'print(row)'以查看發送給你的函數的內容。 –

回答

0

Python中的SQLite fetchall function返回一個元組由該記錄的字段。您需要將content列發送到功能:

def retrieve_article(): 
    c.execute('SELECT content FROM sentence WHERE article_id = "k10010770581000"') 
    for row in c.fetchall(): 
     print(remove_furigana(row[0])) 

或者,您可以使用row_factory拿到字典而不是元組:

import sqlite3 

def dict_factory(cursor, row): 
    d = {} 
    for idx, col in enumerate(cursor.description): 
     d[col[0]] = row[idx] 
    return d 

con = sqlite3.connect(":memory:") con.row_factory = dict_factory 

在這種情況下,使用fetchall結果將是字典和你可以通過以下方式訪問content字段:

print(remove_furigana(row['content'])) 
相關問題