利用python將多個CSV文件寫入sqllite數據庫

前面寫過用python的pandas模塊處理csv表,得到想要的統計結果并用excel不同sheet進行展示佛致。當時處理的CSV是每日的信息表段只,為了有個縱向的比較咬崔,我想把所有信息表(例如整個周或者整月)匯總起來,然后得到每周或者每月的一個統計信息胆胰。那第一步我們就將所有的信息表都寫入數據庫吧狞贱,后期只要按照日期列就可以取出不同時間斷的所有信息了。思路如下:

  1. 創(chuàng)建數據庫蜀涨;
  2. 創(chuàng)建數據表瞎嬉;
  3. 處理每個文件的文件名得到時間參數,這個參數后面會寫入數據表厚柳;
  4. 向數據表中逐條插入數據氧枣;
  5. 提交命令并關閉

因為當前路徑下有很多個csv文件,所以我們定義了一個get_all_csv_name函數别垮,該函數主要作用就是提取當前路徑下的所有csv文件便监。當然下次執(zhí)行時,我們肯定不想重復寫入數據到數據庫宰闰,所以我們又定義了一個wjj.txt文件用于存放所有已經寫入數據庫的csv文件名茬贵。如下圖:


無標題2.png
# -*- encoding=UTF-8 -*-
__author__ = 'wjj1982'
__date__ = '2019/8/24 12:02'
__product__ = 'PyCharm'
__filename__ = '每日當前告警寫入數據庫'

import sqlite3
import os
import pandas as pd


# 讀txt文件簿透,這個txt里面存的上次寫入數據庫的所有文件名
def read_txt(filename):
    if os.path.exists(filename):
        rf = open(filename, 'r')
        rf_content = rf.read()
        rf.close()
        return rf_content
    else:
        return []


# 程序運行的最后把本次寫入數據庫的所有csv文件名 寫入txt文件移袍,防止下次重復寫入
def write_txt(filename, filename_list):
    wf = open(filename, 'a')
    for i in filename_list:
        wf.write(i + '\n')
    wf.close()

# 用os.walk模塊獲取當前路徑下所有csv文件名,為了后續(xù)的逐個csv文件處理做準備老充。
def get_all_csv_name(path, filename_txt):
    rf_content = read_txt(filename_txt)
    filename_list = []
    for folderName, subfolders, filenames in os.walk(path):
        for file_name in filenames:
            if '.csv' in file_name and file_name not in rf_content:
                filename_list.append(file_name)
    return filename_list

# 定義數據表
def FM_table(conn):
    conn.execute("""CREATE TABLE IF NOT EXISTS FMTable (
            '告警日期' TEXT NOT NULL,
            '網元北向標識' TEXT,
            '網元' TEXT,
            '告警碼名稱' TEXT,
            '發(fā)生時間' TEXT,
            '告警原因' TEXT,
            '位置' TEXT)""")
    conn.commit()


def handle_filename_get_date(filename):
    # 提取年月日有兩種寫法葡盗,第一種用for循環(huán),第二種用匿名函數
    # 方法1:
    # ymd_list = []
    # for i in range(3):
    #     ymd_list.append(filename.split('_')[2].split('-')[i])
    # 方法2:
    ymd_list = [filename.split('_')[2].split('-')[i] for i in range(3)]
    return '-'.join(ymd_list)


def read_csv_rb(filename):
    # 直接read_csv讀取會報錯啡浊,所以就增加了一步open來規(guī)避觅够,注意:open后面一定要跟一個close
    filename = open(filename, 'rb')
    pd_csv = pd.read_csv(filename)
    filename.close()
    return pd_csv


def main():
    """1.定義數據庫和數據表;2.處理文件名得到時間參數巷嚣;3.讀取當前告警csv表喘先;4.逐條寫入數據庫"""
    # 定義變量
    path = 'E:\python\python-code\數據庫操作\每日當前告警寫入數據庫'
    txt_name = 'wjj.txt'
    filename_list = get_all_csv_name(path, txt_name)
    db_name = 'current_FM_chengdian.db'

    # 1.(1)連接數據庫,如果不存在會新建該數據庫
    conn = sqlite3.connect(db_name)

    # 1.(2)調用建表函數廷粒,新建FM表
    FM_table(conn)

    for filename in filename_list:
        # 2.處理文件名得到時間參數
        FM_table_date = handle_filename_get_date(filename)

        # 3.讀取當前告警csv表
        pd_csv = read_csv_rb(filename)

        # 4.逐條寫入數據庫
        for index in range(pd_csv.shape[0]):
            if '網元北向標志' in pd_csv.columns:
                me_id = pd_csv.iloc[index]['網元北向標志']
            else:
                me_id = pd_csv.iloc[index]['網元北向標識']
            # 所有數據具備有窘拯,統一添加當前告警表
            conn.execute(
                "INSERT INTO FMTable(告警日期,網元北向標識,網元,告警碼名稱,發(fā)生時間,告警原因,位置) VALUES(?,?,?,?,?,?,?)",
                (FM_table_date, me_id, pd_csv.iloc[index]['網元'], pd_csv.iloc[index]['告警碼名稱'],
                 pd_csv.iloc[index]['發(fā)生時間'], pd_csv.iloc[index]['告警原因'], pd_csv.iloc[index]['位置']))
        print("insert {} to {} successfully!".format(filename, db_name))
        # 最后提交插入命令,然后關閉數據庫
    conn.commit()
    conn.close()
    write_txt(txt_name, filename_list)

if __name__ == '__main__':
    main()

最終執(zhí)行結果如下:


無標題.png

查看數據庫結果如下(信息安全的原因坝茎,我把涉及客戶的信息擦掉了哈):


無標題3.png
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末涤姊,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子嗤放,更是在濱河造成了極大的恐慌思喊,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件次酌,死亡現場離奇詭異恨课,居然都是意外死亡舆乔,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門庄呈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜕煌,“玉大人,你說我怎么就攤上這事诬留⌒奔停” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵文兑,是天一觀的道長盒刚。 經常有香客問我,道長绿贞,這世上最難降的妖魔是什么因块? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮籍铁,結果婚禮上涡上,老公的妹妹穿的比我還像新娘。我一直安慰自己拒名,他們只是感情好吩愧,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著增显,像睡著了一般雁佳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上同云,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天糖权,我揣著相機與錄音,去河邊找鬼炸站。 笑死星澳,一個胖子當著我的面吹牛,可吹牛的內容都是我干的旱易。 我是一名探鬼主播禁偎,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咒唆!你這毒婦竟也來了届垫?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤全释,失蹤者是張志新(化名)和其女友劉穎装处,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡妄迁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年寝蹈,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片登淘。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡箫老,死狀恐怖,靈堂內的尸體忽然破棺而出黔州,到底是詐尸還是另有隱情耍鬓,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布流妻,位于F島的核電站牲蜀,受9級特大地震影響,放射性物質發(fā)生泄漏绅这。R本人自食惡果不足惜涣达,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望证薇。 院中可真熱鬧度苔,春花似錦、人聲如沸浑度。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俺泣。三九已至疗认,卻和暖如春完残,著一層夾襖步出監(jiān)牢的瞬間伏钠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工谨设, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留熟掂,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓扎拣,卻偏偏與公主長得像赴肚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子二蓝,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容