mysql存储csv文件_csv格式的数据存储到mysql

这段代码展示了如何使用Python从CSV文件读取数据并将其存储到MySQL数据库中。通过pymysql模块连接数据库,使用csv库处理CSV文件,根据需要创建数据库表,并将数据转换为适合存储的时间戳格式。
摘要由CSDN通过智能技术生成

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

这是data_stored.py的代码

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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()。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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打开存数据要快。因为前者可以在存好数据后就自动关闭文件,并且可以很好处理上下文的异常,还有清理工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值