日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

今日代码(200612)--数据录入(python+mysql)

發(fā)布時(shí)間:2023/12/19 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 今日代码(200612)--数据录入(python+mysql) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

代碼筆記,僅供參考,有錯(cuò)必糾,別買謝謝
限免:6小時(shí)


文章目錄

      • 任務(wù)
      • python代碼
      • mysql數(shù)據(jù)庫(kù)



任務(wù)


現(xiàn)在要對(duì)一堆PDF文檔里的數(shù)據(jù)進(jìn)行數(shù)據(jù)提取,規(guī)整并整理成一個(gè)完整的數(shù)據(jù)表。

PDF里的數(shù)據(jù)的格式是這樣的(由于數(shù)據(jù)不可外泄,所以我進(jìn)行馬賽克處理,只保留部分?jǐn)?shù)據(jù)):

)

上面顯示的表格是我們需要的數(shù)據(jù),當(dāng)然,這個(gè)PDF文檔中還有很多我們不需要的干擾數(shù)據(jù),所以,我用正則表達(dá)式去匹配我需要的數(shù)據(jù),并添加了一些條件,禁止干擾數(shù)據(jù)進(jìn)入我們最后的數(shù)據(jù)表中。


這些PDF文檔的名字很規(guī)整,方便我們處理,我們可以利用PDF名稱的信息對(duì)從提取到的數(shù)據(jù)進(jìn)行歸類:

)

這些PDF文件里的數(shù)據(jù)分別在2011年、2013年、2015年、2017年和2019年記錄的,所以分別放在下面這5個(gè)文件夾里:

)

因?yàn)槲椰F(xiàn)在還真不知道有什么直接讀PDF的手段,也不會(huì)把PDF轉(zhuǎn)成txt或者其他格式的技術(shù),所以這里自己手動(dòng)復(fù)制到Excel中,再轉(zhuǎn)成csv文件了,轉(zhuǎn)成csv方便我們讀取(之前倒是試了試用CAJViewer把PDF轉(zhuǎn)成txt,但是效果不是我想要的那樣):

)

最后,我們需要提取到PDF中result, reaction,DATE of BIRTH,Fn四個(gè)變量,并且將數(shù)據(jù)記錄的年份(比如2019年)和數(shù)據(jù)分類信息記錄在同一個(gè)表中,并導(dǎo)入mysql中,由此,我創(chuàng)建了一個(gè)mysql數(shù)據(jù)表:

CREATE TABLE RunData(id int(11) primary key auto_increment, PersonDATE date, RESULT float(4,2), REACTION float(4,3), FN int, CompetitionType varchar(20), ProjectClass varchar(20), RunYear YEAR);

python代碼


下面是python代碼:

# -*- coding: utf-8 -*-import re import datetime import os from pandas import DataFrame import pandas as pd import pymysqlclass EiDealData:def __init__(self):self.path = r"F:\MyStudio\PythonStudio\goatbishop.project01\MyNewWork"self.RunData = {}self.countFileNun = 0self.count1 = 0self.count2 = 0self.filter1 = 0self.filter2 = 0self.db = pymysql.connect(host = '127.0.0.1',port = 3306,user = 'root',password = '19970928',database = 'datacup',charset = 'utf8')self.cur = self.db.cursor()def GetFile(self):fileName = os.listdir(self.path)self.GetFormatData(fileName)def GetFormatData(self, fileName):for item in fileName:if os.path.isdir(item):path = self.path + "\\" + itemfileName2 = os.listdir(path)for file in fileName2:if file.endswith(".csv"):self.countFileNun +=1#print(file)#判斷后綴fNameDeal = re.split("\W+", file)#print(fNameDeal)sonDictName = "R_"+ "".join(fNameDeal[0:(len(fNameDeal)- 1)])self.RunData[sonDictName] = {}self.RunData[sonDictName]["REACTION"] = []self.RunData[sonDictName]["RESULT"] = []self.RunData[sonDictName]["DATE"] = []self.RunData[sonDictName]["FN"] = [] #0為沒有犯規(guī),1為犯規(guī)ReadFilePath = path + "\\" + filewith open(ReadFilePath, 'r') as f:data = f.readline()#print(data)while (data):start_char = data[0]#flag1 = re.findall(r"\+|\(|\)", data)#print(flag1)flag2 = len(re.split("\W", data))#print(flag2)if ((ord(start_char) >= 49) & (ord(start_char) <= 57) & (len(data) >= 16) & (flag2 >= 9)):self.count1 +=1#ord("a")為計(jì)算"a"的ASCII碼值pattern0 = r"\b\d{1,2}\.\d{2}\b"pattern1 = r"\b\d\.\d{3}\b"pattern2 = r"\d{1,2} [A-Z][a-zA-Z]{2} \d{2}\b"result = re.findall(pattern0, data)reaction = re.findall(pattern1, data)if result:result = float(result[0])else:temp = re.findall(r"DNF|DQ|DNS", data)if temp:if temp[0] == "DNF":result = -1elif temp[0] == "DQ":result = -2elif temp[0] == "DNS":result = -3else:#print(temp)#print(data)result = -4if reaction:reaction = float(reaction[0])else:data = f.readline()self.filter1 +=1continuetry:date = re.findall(pattern2, data)[0]except Exception as e:print("匹配異常,可能是原始數(shù)據(jù)不規(guī)整")deal_date = "2020-01-01"else:deal_date = datetime.datetime.strptime(date,'%d %b %y').strftime('%Y-%m-%d')#print(date)fn = re.findall(r"\bF\b|\bF1\b", data)#print(fn)if fn:fn = 1else:fn = 0self.RunData[sonDictName]["RESULT"].append(result)self.RunData[sonDictName]["REACTION"].append(reaction)self.RunData[sonDictName]["DATE"].append(deal_date)self.RunData[sonDictName]["FN"].append(fn)data = f.readline()print(item, self.countFileNun)self.countFileNun = 0self.writeMysql(item)self.RunData = {}def writeCsv(self):passdef writeMysql(self, RunYear):dataDealed = self.RunDatafor key in dataDealed:#print(key)CompetitionType = re.findall(r"n(Final)|(Round1)|(SemiFinal)|(Preliminary)", key)[0]CompetitionType = "".join(CompetitionType)ProjectClass = re.findall(r"\d{3}|hurdles", key)ProjectClass = "".join(ProjectClass)#print(len(dataDealed[key]["DATE"]))self.count2 += len(dataDealed[key]["DATE"])ProjectClassL = [ProjectClass]*len(dataDealed[key]["DATE"])#CompetitionType = "".join(cp_list)#print(CompetitionType)CompetitionTypeL = [CompetitionType]*len(dataDealed[key]["DATE"])RunYearL = [RunYear]*len(dataDealed[key]["DATE"])tempData = zip(dataDealed[key]["DATE"], dataDealed[key]["RESULT"],dataDealed[key]["REACTION"], dataDealed[key]["FN"], CompetitionTypeL,ProjectClassL,RunYearL)for item in tempData:#print(item)try:sql = 'insert into RunData(PersonDATE,RESULT,REACTION,FN,CompetitionType,ProjectClass,RunYear) \values(%s, %s, %s, %s, %s, %s, %s);'self.cur.execute(sql, item)self.db.commit()print("提交成功...") except Exception as e:self.db.rollback()print("錯(cuò)誤信息:", e)def main(self):self.GetFile()#self.writeMysql()self.cur.close()self.db.close() if __name__ == "__main__":eiDeal = EiDealData()eiDeal.main()print("進(jìn)入規(guī)則內(nèi)個(gè)數(shù):",eiDeal.count1)print("實(shí)際導(dǎo)入sql個(gè)數(shù)",eiDeal.count2)print("過濾掉數(shù)據(jù)個(gè)數(shù):",eiDeal.filter1)

部分輸出:

提交成功... 提交成功... 提交成功... 進(jìn)入規(guī)則內(nèi)個(gè)數(shù): 4051 實(shí)際導(dǎo)入sql個(gè)數(shù) 2463 過濾掉數(shù)據(jù)個(gè)數(shù): 1588

mysql數(shù)據(jù)庫(kù)

現(xiàn)在,我們看看mysql中是否導(dǎo)入2463條數(shù)據(jù)。

sql語(yǔ)言:

select * from RunData limit 3000;

輸出:

18:17:36 select * from RunData limit 3000 2463 row(s) returned 0.000 sec / 0.015 sec

可以看到,我們已經(jīng)收集到了2363條數(shù)據(jù),現(xiàn)在我們查詢r(jià)esult=-2的記錄:

SELECT * FROM RunData WHERE result=-2;

輸出:

21:31:00 SELECT * FROM RunData WHERE result=-2 LIMIT 0, 1000 19 row(s) returned 0.000 sec / 0.000 sec

可以看到查詢到19條記錄。

總結(jié)

以上是生活随笔為你收集整理的今日代码(200612)--数据录入(python+mysql)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。