我有一个包含10个表的数据库:(日期、日期、月份、年份、pcp1、pcp2、pcp3、pcp4、pcp5、pcp6),每个列都有41年的数据集。日、月和年列为“空”,因为我稍后将在导出csv文件中的表后添加它们,我做了这一部分,但格式不正确,因为每列必须分别独立。
下面是我的数据库示例:

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)

最佳答案

查询不应返回标题。而且我对下面两点都很有信心。这是未经测试的,但是description属性返回最后一个查询表名,因此它应该可以工作
关于每一行多余的空行:我想你在用windows。将输出作为文本文件打开会添加一个额外的\r(回车字符)。Python2和Python3的处理方式不同:
它实际上是可以的,但是您会觉得它不起作用,因为您要用excel打开csv,而excel需要一个;默认情况下,对于csv s=>您必须指定分号分隔符,否则excel会在一列上打开它。
查看我的更改:
在Python3中(无法以二进制方式打开文本文件):

    with open('output.csv', 'w', newline="") as f:
        writer = csv.writer(f,delimiter=';')

根据文件
writer.writerows(数据)
在Python 2中(新行选项不存在):
    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()

10-07 18:54
查看更多