import sqlite3
import string
import nltk
conn = sqlite3.connect('db.sqlite3')
k=22
c=""
cur=conn.cursor()
cur.execute('SELECT KEYWORDS from Content WHERE ID=?',(k,))
data=cur.fetchone()
cur.execute('SELECT KEYWORDS from CONTENT')
c=cur.fetchall()
print("content keywords are %s" % c)
for i in range(len(c)):
d = nltk.word_tokenize(c[i])
for j in range(len(d)):
print("tokens are %s" % d[j])
上面的python代码在行TypeError: expected string or buffer error
中给出了d = nltk.word_tokenize(c[i])
。我是python编程的新手,有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
c[i]
的每个值c
(cur.fetchall()
的结果)是一个元素tuple
。您需要使用c[i][0]
代替c[i]
。
顺便说一句,请避免使用for i in range(len(x)): [...] x[i]
模式并使用for e in x: [...] e
。使用您的代码,我们可以:
import sqlite3
import string
import nltk
conn = sqlite3.connect('db.sqlite3')
cur=conn.cursor()
cur.execute('SELECT KEYWORDS from CONTENT')
c = cur.fetchall()
print("content keywords are %r" % c)
for result in c:
d = nltk.word_tokenize(result[0])
for token in d:
print("tokens are %s" % token)