[英]SQLITE3 database tables export in CSV
我有一個包含10個表的數據庫:(日期,日,月,年,年,pcp1,pcp2,pcp3,pcp4,pcp5,pcp6),每列都有41年的數據集。 day,month和year列為“ Null”,因為l將在csv文件中導出表后稍后添加它們,並且l做了這部分,但是格式不正確,因為每個列必須分別分開。
這是我的數據庫示例:
date day month year pcp1 pcp2 pcp3 pcp4 pcp5 pcp6
1.01.1979 0.431 2.167 9.375 9.375 0.431 9.375
2.01.1979 1.216 2.583 9.162 9.162 1.216 9.162
3.01.1979 4.041 9.373 23.169 23.169 4.041 23.169
4.01.1979 1.799 3.866 8.286 8.286 1.799 8.286
5.01.1979 0.003 0.051 0.342 0.342 0.003 0.342
6.01.1979 2.345 3.777 7.483 7.483 2.345 7.483
7.01.1979 0.017 0.031 0.173 0.173 0.017 0.173
我想得到上面的所有表格。 但是,我得到以下輸出:
Column 1,Column 2,Ellipsis
1979-01-01,,,,0.431,2.167,9.375,9.375,0.431,9.375
1979-01-02,,,,1.216,2.583,9.162,9.162,1.216,9.162
1979-01-03,,,,4.041,9.373,23.169,23.169,4.041,23.169
1979-01-04,,,,1.799,3.866,8.286,8.286,1.799,8.286
1979-01-05,,,,0.003,0.051,0.342,0.342,0.003,0.342
有一些問題。 首先,不存在標題,其次,跳過另一行(1至3)而不是(1至2),最后所有數據都列在column1下。
我的代碼是:
import csv
import sqlite3
conn=sqlite3.connect("pcpnew6.db")
c=conn.cursor()
data = c.execute("SELECT * FROM pcp3")
with open('output.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(['Column 1', 'Column 2', ...])
writer.writerows(data)
這是我的問題的答案,並結合了Jean-FrançoisFabre發布的代碼,感謝他的幫助。
import sys
import sqlite3
import csv
conn=sqlite3.connect("pcpnew6.db")
c=conn.cursor()
conn.row_factory=sqlite3.Row
crsr=conn.execute("SELECT * From pcp3")
row=crsr.fetchone()
titles=row.keys()
data = c.execute("SELECT * FROM pcp3")
if sys.version_info < (3,):
f = open('output.csv', 'wb')
else:
f = open('output.csv', 'w', newline="")
writer = csv.writer(f,delimiter=';')
writer.writerow(titles) # keys=title you're looking for
# write the rest
writer.writerows(data)
f.close()
這是代碼的輸出:
date day month year pcp1 pcp2 pcp3 pcp4 pcp5 pcp6
1.01.1979 0.431 2.167 9.375 9.375 2.167 0.431
2.01.1979 1.216 2.583 9.162 9.162 2.583 1.216
3.01.1979 4.041 9.373 23.169 23.169 9.373 4.041
4.01.1979 1.799 3.866 8.286 8.286 3.866 1.799
5.01.1979 0.003 0.051 0.342 0.342 0.051 0.003
6.01.1979 2.345 3.777 7.483 7.483 3.777 2.345
description
屬性返回最后一個查詢表名稱,因此它應該可以工作 \\r
(回車符)。 在python 2和python 3之間的處理方式不同: ;
默認情況下,對於csvs =>,您必須指定分號分隔符,否則Excel會在一列上將其打開。 查看我的更改:
在python 3中(無法以二進制形式打開文本文件):
with open('output.csv', 'w', newline="") as f:
writer = csv.writer(f,delimiter=';')
根據文檔writer.writerows(data)
在python 2中(newline選項不存在):
with open('output.csv', 'wb') as f:
writer = csv.writer(f,delimiter=';')
writer.writerows(data)
編輯:python 2/3兼容代碼段,標題行:
import sys
if sys.version_info < (3,):
f = open('output.csv', 'wb')
else:
f = open('output.csv', 'w', newline="")
writer = csv.writer(f,delimiter=';')
first_item = next(data) # get first item to get keys
writer.writerow(first_item.keys()) # keys=title you're looking for
writer.writerow(first_item)
# write the rest
writer.writerows(data)
f.close()
或使用熊貓。
import pandas
rows = cur.fetchall()
df = pandas.DataFrame.from_records(rows)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.