• csv格式的数据存储到mysql


    python写的,有点冗余,先码出来~~~~

    这是data_stored.py的代码

     1 # -*- coding:utf-8 -*-
     2 # 存数据到mysql (只存了时间数字)
     3 import pymysql
     4 import csv
     5 import datetime
     6 import settings
     7 from mysql import db
     8 import os,time
     9 import pandas as pd
    10 import numpy as np
    11 import threading
    12 from apscheduler.schedulers.blocking import BlockingScheduler
    13 from datetime import date
    14 import csv
    15 import utils
    16 # filename = 'may_origin.csv'
    17 # tablename = 'origin_data'
    18 class data_stored(object):
    19     def __init__(self):
    20         pass
    21 
    22 
    23     def data_stored(self,filename,tablename):
    24 
    25         csvfile = open(filename,'r')
    26         dict_reader = csv.DictReader(csvfile)
    27         db.connect()
    28         datas = []
    29         freq = 0
    30 
    31         for row in dict_reader:
    32              row = dict(row)
    33              if row['']:
    34                 del(row[''])
    35      #创建表
    36              columns =[]
    37              for i in row.keys():
    38                   columns.append(i)
    39              if (db.is_table_exist(tablename=tablename,dbname=settings.database) ==None and freq ==0 ):
    40                     db.create_table(tablename=tablename,columns=columns)
    41                     freq += 1
    42                     print("create is ok")
    43              else:
    44                   pass
    45     #插入数据
    46              row['time'] = int(time.mktime(time.strptime(row['time'], '%Y-%m-%d %H:%M:%S')))
    47              datas.append(row)
    48         db.insert_mysql_with_json(tablename, datas)
    49         print("insert is ok")
    50         db.disconnect()
    51 
    52     def data_to_csv(self,filename,tablename,starttime,endtime,readfile=None,sep=None):
    53 
    54         db.connect()
    55         fieldNames, results = db.find(tablename, starttime, endtime)
    56 
    57 
    58         data = []
    59 
    60         for fn in fieldNames:
    61             data.append(fn)
    62         #文件不存在
    63         if readfile == None:
    64            csvfile = open(filename, 'w')
    65            writer = csv.writer(csvfile, dialect=("excel"))
    66            # 插入列名
    67            data_1 = []
    68            data_1 = sorted(set(data), key=data.index)
    69            writer.writerow(data_1)
    70         #文件存在
    71         else:
    72             csvfile = open(filename, 'a')
    73             writer = csv.writer(csvfile, dialect=("excel"))
    74 
    75         # 插入data
    76         for info in results:
    77             data_2 = []
    78             # for m_2 in info:
    79             #     data_2.append(m_2)
    80             writer.writerow(info)
    81         csvfile.close()
    82         db.disconnect()
    83 # #
    84 # if __name__ == "__main__":
    85 #     filename='may_origin.csv'
    86 #     filename2='csvtest_05.csv'
    87 #     tablename = 'originData'
    88 #     st = 1462032004
    89 #     et = 1462032007
    90 #
    91 #     t = data_stored()
    92 #     starttime = datetime.datetime.now()
    93 #
    94 #     # t.data_stored(filename,tablename)
    95 #     t.data_to_csv(filename2,tablename, st,et)
    96 #     endtime =datetime.datetime.now()
    97 #
    98 #     print(endtime-starttime)
    99 ds = data_stored()
    View Code

    其中调用了mysql.py的代码就不码了,就是一些连接、断开数据库connect()、disconnect(),创建数据库create_table(),判断tablename是否存在is_table_exist,以及查列名find_columns(),查找数据find(),还有插入数据库数据insert_into_mysql()。

     1 import settings
     2 from mysql import db
     3 import os
     4 import csv
     5 import utils
     6 
     7 
     8 def time_main(start_time, end_time, tablename, columns=None):
     9         timespan = settings.timespan
    10         output_filename = 'sfhd_' + '_origin_' + utils.getDigitDay(start_time) + '.csv'
    11         db.connect()
    12         # 判断输出文件是否存在 :False为不存在
    13         if os.path.isfile(output_filename) == False:
    14               pass
    15         else:
    16               end_time = start_time
    17               start_time = start_time -86400
    18               output_filename = 'sfhd_' + '_origin_' + utils.getDigitDay(start_time) + '.csv'
    19 
    20 
    21         # 隔一个时间段timespan存一次
    22         with open(output_filename, 'w') as csvfile:
    23 
    24             if columns == None:
    25                 columns = db.find_columns(tablename)
    26             data = list(columns)
    27 
    28             writer = csv.writer(csvfile, dialect=("excel"))
    29             data_1 = sorted(set(data), key=data.index)
    30             writer.writerow(data_1)
    31 
    32             temp_time = start_time + timespan
    33             current_time = start_time
    34 
    35             while temp_time <= end_time+3:
    36                 utils.log_easy('time_main', utils.getTimeDes(temp_time))
    37                 fieldNames, results = db.find(tablename, current_time, temp_time-1, columns)
    38                 # 插入data
    39                 for info in results:
    40                     writer.writerow(info)
    41                 current_time = temp_time
    42                 temp_time = current_time + timespan
    43         db.disconnect()
    View Code

    这是简化过后的mysql数据存到CSV文件中。

    常见的mode取值组合

    r或rt  默认模式,文本模式读
    rb     二进制文件
     
    w或wt 文本模式写,打开前文件存储被清空
    wb    二进制写,文件存储同样被清空
     
    a   追加模式,只能写在文件末尾
    a+  可读写模式,写只能写在文件末尾
     
    w+ 可读写,与a+的区别是要清空文件内容
    r+ 可读写,与a+的区别是可以写到文件任何位置

    在选择读文件的方式时,我发现 with open 打开文件并存数据,要比直接open打开存数据要快。因为前者可以在存好数据后就自动关闭文件,并且可以很好处理上下文的异常,还有清理工作。

  • 相关阅读:
    个人对回调函数的理解(personal understanding of callback function)
    蓄水池抽样及实现
    一些我做的软件
    poj1063 解题报告(poj 1063 analysis report)
    有关MAP、ML和EM的个人理解
    2012年总结
    asp.net中requiredfieldvalidator很纠结的问题(有关ClientScript属性)
    wcf在iis6上的部署
    GridView后台代码动态显示隐藏ItemTemplate
    aspx向silverlight传值
  • 原文地址:https://www.cnblogs.com/BigStupid/p/7816333.html
Copyright © 2020-2023  润新知