2016-09-20 5 views
0

Google 크롬 기록 데이터베이스에서 기록을 추출하고이를 CSV 파일로 출력하는 프로그램을 작성 중입니다. 정보를 여러 행에 넣으려고합니다. 예를 들어 URL의 목록을 첫 번째 행에, 웹 페이지 제목을 두 번째 행에 넣으려고합니다. 나는이 작업을 수행 할 때, 나는 다음과 같은 오류가 나타날 수파이썬의 CSV 행에 여러 목록 작성하기

형식 오류 : 유니 코드를 디코딩하는 것은 지원되지 않습니다

어떤 도움을 주시면 감사하겠습니다

, 아래에있는 내 코드입니다 :

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에 추가됩니다. 나는 이것을 아직 구현하지 않았다.

감사 팬더가 당신에게 CSV 파일에 많은 도움이 될 수 있습니다 사용

+0

몇 가지 사항이 여기에 표시되지 않습니다. 'cursor'는'conn.cursor()'이어야하고 커서를 통해 쿼리를 실행하고'data = cursor.fetchall()'을 사용하여 데이터를 검색합니다. 'timestamp = row [3]'는'row'가 정의되지 않았기 때문에 에러를 던져야합니까? CSV를 두 번 열어 볼 필요가 없습니다. 제목을 쓰고 'for' 루프로 이동하십시오. 어째서 유니 코드가 필요한 이유는 무엇입니까? 나는 대답을 쓸 것이지만 나는 당신의 DB에 대해 아무 것도 모르기 때문에 그것이 효과가있을 것이라고 확신 할 수 없다. – roganjosh

답변

1

:

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])]) 
관련 문제