csv格式的數據存儲到mysql

来源:http://www.cnblogs.com/BigStupid/archive/2017/11/10/7816333.html
-Advertisement-
Play Games

python寫的,有點冗餘,先碼出來~~~~ 這是data_stored.py的代碼 1 # -*- coding:utf-8 -*- 2 # 存數據到mysql (只存了時間數字) 3 import pymysql 4 import csv 5 import datetime 6 import s ...


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打開存數據要快。因為前者可以在存好數據後就自動關閉文件,並且可以很好處理上下文的異常,還有清理工作。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、通過原生js獲取this對象 ``` <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <form action="" class="files" > <label class ...
  • 通過上一節課創建了一個Android的Hello World項目,項目預設包含一系列源文件,它讓我們可以立即運行應用程式。 如何運行Android應用取決於兩件事情:是否有一個Android設備和是否正在使用Android Studio開發程式。本節課將會教使用Android Studio和命令行兩 ...
  • 先看效果看 載入了一張image,根據四個頂點任意變換。 知識點:1.BitmapContext 2.矩陣變換 一.什麼是BitmapContext 官方解釋: The number of components for each pixel in a bitmap graphics context ...
  • 如下分析針對的API 25的AsyncTask的源碼: 使用AsyncTask如果是調用execute方法則是同步執行任務,想要非同步執行任務可以直接調用executeOnExecutor方法,多數情況下我們會使用AsyncTask內部靜態的線程池, THREAD_POOL_EXECUTOR,這裡並不 ...
  • 轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自 "【趙彥軍的博客】" 在插件開發過程中,我們按照開發一個正式的項目來操作,需要整理一些常用工具類。 Http 請求封裝 在插件的項目中,我們看到依賴庫如下圖所 ...
  • 一、前言 前段時間註意到我們APP的包大小超過100MB了,所以隨口跟老闆說了下能否採用字體文件(.ttf)替代PNG圖片,老闆對應用瘦身很感興趣因此讓我做下技術調研。這篇文章主要是將我們的各個技術方案的思路做一下整理和總結,希望對大家有所幫助。 二、iOS內置資源的集中方式 在介紹技術方案前我們先 ...
  • 一、簡介 DMProgressHUD是一款用於顯示非同步操作任務進度狀態的視圖工具。 該工具包含了目前較為主流的載入狀態視圖類型,後續會根據具體情況或需求進行迭代。 DMProgressHUD從設計層次的角度來看,其包含了5種展示模式: 二、導入(Platform : ios >= 8.0) 方案1: ...
  • http://m.blog.csdn.net/potato512/article/details/51487643 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...