python写的,有点冗余,先码出来~~~~
这是data_stored.py的代码
1 #-*- coding:utf-8 -*-
2 #存数据到mysql (只存了时间数字)
3 importpymysql4 importcsv5 importdatetime6 importsettings7 from mysql importdb8 importos,time9 importpandas as pd10 importnumpy as np11 importthreading12 from apscheduler.schedulers.blocking importBlockingScheduler13 from datetime importdate14 importcsv15 importutils16 #filename = 'may_origin.csv'
17 #tablename = 'origin_data'
18 classdata_stored(object):19 def __init__(self):20 pass
21
22
23 defdata_stored(self,filename,tablename):24
25 csvfile = open(filename,'r')26 dict_reader =csv.DictReader(csvfile)27 db.connect()28 datas =[]29 freq =030
31 for row indict_reader:32 row =dict(row)33 if row['']:34 del(row[''])35 #创建表
36 columns =[]37 for i inrow.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 infieldNames: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 inresults: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 importsettings2 from mysql importdb3 importos4 importcsv5 importutils6
7
8 def time_main(start_time, end_time, tablename, columns=None):9 timespan =settings.timespan10 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_time17 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 +timespan33 current_time =start_time34
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 inresults:40 writer.writerow(info)41 current_time =temp_time42 temp_time = current_time +timespan43 db.disconnect()
View Code
这是简化过后的mysql数据存到CSV文件中。
常见的mode取值组合
r或rt 默认模式,文本模式读
rb 二进制文件
w或wt 文本模式写,打开前文件存储被清空
wb 二进制写,文件存储同样被清空
a 追加模式,只能写在文件末尾
a+ 可读写模式,写只能写在文件末尾
w+ 可读写,与a+的区别是要清空文件内容
r+ 可读写,与a+的区别是可以写到文件任何位置
在选择读文件的方式时,我发现 with open 打开文件并存数据,要比直接open打开存数据要快。因为前者可以在存好数据后就自动关闭文件,并且可以很好处理上下文的异常,还有清理工作。