Python和Sqlite3,将数据文本文件转换为sql数据库

时间:2017-01-11 15:06:39

标签: python sqlite python-3.5

所以我已经完成了一项任务/挑战,但我只是不知道从哪开始我已经掌握了Python的经验,但没有使用数据库和数据转换到描述。

所以这是我给出的文本文件的片段:

   Grid-ref=   1, 148
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630
 3020 2820 3040 2880 1740 1360  980  990 1410 1770 2580 2630

Grid-ref=   1, 311
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
  490  290  280  230  200  250  440  530  460  420  530  450
Grid-ref=   1, 312
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410
  460  280  260  220  190  240  430  520  450  400  520  410

因此,我必须创建一个包含4列的数据库,如下所示:

Xref    Yref    Date        Value
1       148     1,1,2000    3020
1       148     1,2,2000    2820

我希望你能看到格局,所以grid-ref = 1,148是我的X& Y然后每个值显然是值,但我需要迭代,然后对于每个值,它然后给它新的日期,这是每个月的第一个10年。

到目前为止,我有这个代码,我知道这不是一个开始。

    import os
    import csv
    import sqlite3

    f_path = os.path.dirname(os.path.abspath(__file__)) + "/data/"

    db = sqlite3.connect('output.db')
    cursor = db.cursor()
    cursor.execute('CREATE TABLE Data (Xref, Yref, Date, Value)')

    date = 2000 - 2010
    grid = 'Xref, Yref'

with open(f_path + "data.to.use.txt") as file_read:
    for row in csv.DictReader(file_read):
        cursor.execute('''INSERT INTO Data
                              VALUES (:Xref, :Yref, :Date, :Value)''', row)


db.commit()
db.close()

感谢您提供所有反馈和指导,我对此类任务感到陌生,希望您能提供帮助。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下代码。我对日期要求并不十分清楚。所以我只为每个条目添加了一个月

from datetime import date,datetime
from dateutil.relativedelta import relativedelta
Xref=''
Yref=''
date =datetime.strptime('2000-01-01', '%Y-%m-%d')
with open('C:\Users\shmathew\Desktop\Sample\sample.txt') as file_read:
    for row in file_read:
        print row
        if 'Grid-ref' in row:
            Xref = row.split(',')[0].split('=   ')[1]
            Yref = row.split(',')[1]
        else:
            for Value in row.split('  '):
                date = date + relativedelta(months=+1)
                print Xref.strip(),Yref.strip(),date,Value.strip()

示例输出

490  290  280  230  200  250  440  530  460  420  530  450

1 311 2009-08-01 00:00:00 490
1 311 2009-09-01 00:00:00 290
1 311 2009-10-01 00:00:00 280
1 311 2009-11-01 00:00:00 230
1 311 2009-12-01 00:00:00 200
1 311 2010-01-01 00:00:00 250
1 311 2010-02-01 00:00:00 440
1 311 2010-03-01 00:00:00 530
1 311 2010-04-01 00:00:00 460
1 311 2010-05-01 00:00:00 420
1 311 2010-06-01 00:00:00 530
1 311 2010-07-01 00:00:00 450
490  290  280  230  200  250  440  530  460  420  530  450

1 311 2010-08-01 00:00:00 490
1 311 2010-09-01 00:00:00 290
1 311 2010-10-01 00:00:00 280
1 311 2010-11-01 00:00:00 230
1 311 2010-12-01 00:00:00 200
1 311 2011-01-01 00:00:00 250
1 311 2011-02-01 00:00:00 440
1 311 2011-03-01 00:00:00 530
1 311 2011-04-01 00:00:00 460
1 311 2011-05-01 00:00:00 420
1 311 2011-06-01 00:00:00 530
1 311 2011-07-01 00:00:00 450
490  290  280  230  200  250  440  530  460  420  530  450
1 311 2011-08-01 00:00:00 490
1 311 2011-09-01 00:00:00 290
1 311 2011-10-01 00:00:00 280
1 311 2011-11-01 00:00:00 230
1 311 2011-12-01 00:00:00 200
1 311 2012-01-01 00:00:00 250
1 311 2012-02-01 00:00:00 440
1 311 2012-03-01 00:00:00 530
1 311 2012-04-01 00:00:00 460
1 311 2012-05-01 00:00:00 420
1 311 2012-06-01 00:00:00 530
1 311 2012-07-01 00:00:00 450