我正在使用我的python脚本从sqlite3数据库中提取数据。
当我尝试这段代码时:
#Pull the data from the database
c = con.cursor()
channelList = list()
channel_db = xbmc.translatePath(os.path.join('special://userdata/addon_data/script.tvguide', 'source.db'))
if os.path.exists(channel_db):
c.execute('SELECT channel, title, start_date, stop_date FROM programs WHERE channel')
for row in c:
channel = row[0], row[1],row[2], row[3]
channelList.append(channel)
print channel
c.close()
我将获取包含unicode u
和长日期L
的数据列表,如下所示:
20:52:01 T:5212 NOTICE: (u'101 ABC FAMILY ', u'Reba - Location, Location, Location', 20140522133000L, 20140522140000L)
20:52:01 T:5212 NOTICE: (u'101 ABC FAMILY ', u'Reba - Your Place or Mine', 20140522140000L, 20140522143000L)
20:52:01 T:5212 NOTICE: (u'101 ABC FAMILY ', u"Reba - She's Leaving Home, Bye, Bye", 20140522143000L, 20140522150000L)
20:52:01 T:5212 NOTICE: (u'101 ABC FAMILY ', u'Boy Meets World - No Such Thing as a Sure Thing', 20140522150000L, 20140522153000L)
我想打印没有u
和L
字符串的数据。
请您告诉我如何在没有u
和L
字符串的情况下打印数据?
答案 0 :(得分:0)
问题是您正在打印tuple
,其中的元素将使用__repr__
而不是__str__
打印。要以更自然的方式打印每个,请尝试:
print row[0], row[1], row[2], row[3]
示例说明:
>>> print u'Hello'
Hello
>>> print (u'Hello', u'World')
(u'Hello', u'World')
>>> print u'Hello', u'World'
Hello World
<强>加工强>
如果您有兴趣转换数据以使字符串不再是unicode,并且日期为int
而不是long
s,则可以执行以下操作:
>>> channel = row[0].encode('ascii'), row[1].encode('ascii'), int(row[2]), int(row[3])
>>> print channel
('101 ABC FAMILY ', 'Reba - Location, Location, Location', 20140522133000, 20140522140000)
请注意,如果字符串包含非ascii字符,encoding to ascii将失败,方法是引发UnicodeDecodeError
。将long
投射到int
永远不会引发异常,但如果数字太大而无法存储在long
中,结果将只是另一个int
。 More about Python's long
文字工厂:
另一种选择是使用名为text_factory
的sqlite3功能。在c.execute
:
con.text_factory = lambda x: x.encode('ascii')
检索任何文本列时会自动调用此方法。请注意,在这种情况下,如果文本无法正确解码,UnicodeDecodeError
将被c.execute
提升。