2016-09-20 10 views
0

Google Chromeの履歴データベースから履歴を抽出し、CSVファイルに出力するプログラムを作成しています。私は、複数の行に情報を入れようとしています。たとえば、最初の行にURLのリスト、2番目の行にWebページのタイトルのリストです。私はこれを行うときしかし、私は次のエラーが表示されます複数のリストをPythonのCSV行に書き込む

はTypeError:Unicodeを解読することはサポートされていません

任意の助けをいただければ幸いです

、以下の私のコードです:

import sqlite3 
import datetime 
import csv 

def urls(): 
    conn = sqlite3.connect('C:\Users\username\Desktop\History.sql') 
    cursor = conn.execute("SELECT url, title, visit_count, last_visit_time from urls") 

    timestamp = row[3] 
    value = datetime.datetime(1601, 1, 1) + datetime.timedelta(microseconds=timestamp) 

    with open("C:\Users\username\Desktop\\historyulrs.csv", "ab") as filecsv: 
     filecsvwriter = csv.writer(filecsv) 
     filecsvwriter.writerow(["Url", "Title", "Visit Count", "Last visit Time"]) 

    for row in cursor: 
     with open("C:\Users\username\Desktop\\historyulrs.csv", "ab") as filecsv: 
      filecsvwriter = csv.writer(filecsv) 
      filecsvwriter.writerows([unicode(row[0], row[1]).encode("utf-8")]) 

    conn.close() 

urls() 

は私も取り出しますCSVに追加するデータベースから訪問回数と最終訪問時間を計算します。私はこれをまだ実装していない。パンダを使用して

+0

ここではいくつかのことは正しくありません。 'cursor'は' conn.cursor() 'でなければなりません。カーソルを使ってクエリを実行し、' data = cursor.fetchall() 'を使ってデータを取得します。 'timestamp = row [3]'は 'row'が定義されていないのでエラーを投げますか? CSVを2回開く必要はありません。あなたのタイトルを書いてから、あなたの 'for'ループに入ります。とにかく「ユニコード」が必要なのはなぜですか?私は答えを書くだろうが、私はあなたのDBの何も知らないので、それが動作すると確信することができませんでした。 – roganjosh

答えて

1

は、CSVファイルで、あなたに多くを助けることができる

ありがとう:

import sqlite3 
import datetime 
import pandas 

def urls(): 
    urls = [] 
    titles = [] 
    counts = [] 
    last = [] 
    conn = sqlite3.connect('C:\Users\username\Desktop\History.sql') 
    cursor = conn.execute("SELECT url, title, visit_count, last_visit_time from urls") 

    for row in cursor: 
    #now I am just guessing 
     urls.append(row[0]) 
     titles.append(row[1]) 
     counts.append(row[2]) 
     last.append(row[3]) 

    df = pandas.DataFrame({'URL': urls, 
          'Title': titles, 
          'Visit Count': counts, 
          'Last visit Time': last}) 

    df.to_csv('historyulrs.csv', encoding='utf-8', index=False) 
    conn.close() 

urls() 

は、私は完全に行のデータの順序を推測し、あなたのに応じてそれを編集する必要があることに注意してくださいニーズ。また、私はなぜあなたはdatetimeが必要なのかよく理解していませんでした。

+0

パンダは、[read_sql](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html)を使用してSQLクエリから直接読み込むことができます。 – Parfait

1

これは、DBを見ずに答えるのは簡単ではありません。しかし、このようなものは、あなたの実際のデータに応じていくつかの小さな修正を加えて機能するはずです。

import sqlite3 
import datetime 
import csv 

def urls(): 
    conn = sqlite3.connect('C:\Users\username\Desktop\History.sql') 
    c = conn.cursor() 
    query = "SELECT url, title FROM urls" 
    c.execute(query) 
    data = c.fetchall() 

    if data: 
     with open("C:\Users\username\Desktop\\historyulrs.csv", 'w') as outfile: 
      writer = csv.writer(outfile) 
      writer.writerow(['URL', 'Title']) 
      for entry in data: 
       writer.writerow([str(entry[0]), str(entry[1])]) 
関連する問題