【问题标题】:convert output from sqlite from tuple to list in Python将sqlite的输出从元组转换为Python中的列表
【发布时间】:2015-10-01 09:12:48
【问题描述】:

我是编程新手,正在编写一个简单的 Python 脚本,该脚本将从 PC 收集一些信息用于取证目的。我想要的一些信息是 Chrome 历史记录。基本上我需要从历史 sqlite 数据库中读取数据,执行计算以将时间戳转换为人类可读的格式,然后将数据写入 CSV 文件。我有以下代码:

connection = sqlite3.connect('c:\history')### need correct path
connection.text_factory = str
cur = connection.cursor()
output_file = open('chrome_history2.csv', 'wb')
csv_writer = csv.writer(output_file,)
headers = ('URL', 'Title', 'Visit Count', 'Last Visit')
csv_writer.writerow(headers)
epoch = datetime(1601, 1, 1)
for row in (cur.execute('select url, title, visit_count, last_visit_time from urls limit 10')): #selects data
        list(row) #convert to list - does not work
        url_time = epoch + timedelta(microseconds=row[3]) #calculates time
        row[3] = url_time #changes value in row to readable time
        csv_writer.writerow(row)
connection.close()

此代码返回错误:

TypeError: 'tuple' object does not support item assignment

我知道我无法操作元组中的数据,但我明确地将每一行转换为一个列表。谁能解释 a) 为什么 列表(行) 不起作用,并且 b) 有更好的方法吗?

提前致谢!

【问题讨论】:

  • list 不会更改值,它返回一个新列表。
  • list(row) 返回一个新列表,您将其丢弃。 row = list(row) 会起作用。
  • 在命令提示符下试一下就好了。

标签: python sqlite csv


【解决方案1】:

我认为:

        list(row) #convert to list - does not work

应该是:

        row = list(row) #convert to list

此外,您可能希望考虑使用csv.DictReader 对象而不是默认读取器,因为它可能更方便(并且是可变的,与默认元组不同)。有关详细信息,请参阅https://docs.python.org/2/library/csv.html#csv.DictReader

【讨论】:

  • 是的 - 修复了它。谢谢。
【解决方案2】:

另一种解决方法是这样的-->

    conn = sqlite3.connect('library.db')
    conn.row_factory = lambda cursor, row: row[0]
    c = conn.cursor()

    id_sql = 'SELECT emp_id FROM teachtable WHERE teach_name = "%s"' % (name1)
    id_no = c.execute(id_sql).fetchall()
    conn.commit()
    conn.close()
    # This list output can be used to iterate through it in a for loop
    
    # print the first element from the list
    idno = id_no[0]
    print(id_no)

这里是a reference link to understand how "row_factory" object is used to return the query output as a list

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 2013-04-22
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2010-12-25
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多