csv格式的数据存储到mysql

时间:2023-03-09 18:59:59
csv格式的数据存储到mysql

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

这是data_stored.py的代码

 # -*- coding:utf-8 -*-
# 存数据到mysql (只存了时间数字)
import pymysql
import csv
import datetime
import settings
from mysql import db
import os,time
import pandas as pd
import numpy as np
import threading
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import date
import csv
import utils
# filename = 'may_origin.csv'
# tablename = 'origin_data'
class data_stored(object):
def __init__(self):
pass def data_stored(self,filename,tablename): csvfile = open(filename,'r')
dict_reader = csv.DictReader(csvfile)
db.connect()
datas = []
freq = 0 for row in dict_reader:
row = dict(row)
if row['']:
del(row[''])
#创建表
columns =[]
for i in row.keys():
columns.append(i)
if (db.is_table_exist(tablename=tablename,dbname=settings.database) ==None and freq ==0 ):
db.create_table(tablename=tablename,columns=columns)
freq += 1
print("create is ok")
else:
pass
#插入数据
row['time'] = int(time.mktime(time.strptime(row['time'], '%Y-%m-%d %H:%M:%S')))
datas.append(row)
db.insert_mysql_with_json(tablename, datas)
print("insert is ok")
db.disconnect() def data_to_csv(self,filename,tablename,starttime,endtime,readfile=None,sep=None): db.connect()
fieldNames, results = db.find(tablename, starttime, endtime) data = [] for fn in fieldNames:
data.append(fn)
#文件不存在
if readfile == None:
csvfile = open(filename, 'w')
writer = csv.writer(csvfile, dialect=("excel"))
# 插入列名
data_1 = []
data_1 = sorted(set(data), key=data.index)
writer.writerow(data_1)
#文件存在
else:
csvfile = open(filename, 'a')
writer = csv.writer(csvfile, dialect=("excel")) # 插入data
for info in results:
data_2 = []
# for m_2 in info:
# data_2.append(m_2)
writer.writerow(info)
csvfile.close()
db.disconnect()
# #
# if __name__ == "__main__":
# filename='may_origin.csv'
# filename2='csvtest_05.csv'
# tablename = 'originData'
# st = 1462032004
# et = 1462032007
#
# t = data_stored()
# starttime = datetime.datetime.now()
#
# # t.data_stored(filename,tablename)
# t.data_to_csv(filename2,tablename, st,et)
# endtime =datetime.datetime.now()
#
# print(endtime-starttime)
ds = data_stored()

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

 import settings
from mysql import db
import os
import csv
import utils def time_main(start_time, end_time, tablename, columns=None):
timespan = settings.timespan
output_filename = 'sfhd_' + '_origin_' + utils.getDigitDay(start_time) + '.csv'
db.connect()
# 判断输出文件是否存在 :False为不存在
if os.path.isfile(output_filename) == False:
pass
else:
end_time = start_time
start_time = start_time -86400
output_filename = 'sfhd_' + '_origin_' + utils.getDigitDay(start_time) + '.csv' # 隔一个时间段timespan存一次
with open(output_filename, 'w') as csvfile: if columns == None:
columns = db.find_columns(tablename)
data = list(columns) writer = csv.writer(csvfile, dialect=("excel"))
data_1 = sorted(set(data), key=data.index)
writer.writerow(data_1) temp_time = start_time + timespan
current_time = start_time while temp_time <= end_time+3:
utils.log_easy('time_main', utils.getTimeDes(temp_time))
fieldNames, results = db.find(tablename, current_time, temp_time-1, columns)
# 插入data
for info in results:
writer.writerow(info)
current_time = temp_time
temp_time = current_time + timespan
db.disconnect()

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

常见的mode取值组合

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

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