Python是數據分析的強大利器
利用Python做數據分析,第一步就是學習如何讀取日常工作中產生各種excel報表并存入數據中,方便后續數據處理。
這里向大家分享python如何讀取excel,并使用Python將數據存入Mysql中,有需要的朋友們一起來看看吧。
背景
需要導入全國高校名錄到數據庫,從教委網站下到了最新的數據,是excel格式,需要做一個工具進行導入,想試用一下python,說干就干。
庫
- xlrd : excel讀寫庫
- pymysql : mysql數據庫驅動庫,純python打造
- re : 正則表達式庫,核心庫
前兩個用pip輕松完成安裝,本人是在mac pro是進行的,過程很順利,以前在mac上裝mysqlclient一直安裝不上,所以一度放棄使用python,但我在linux下安裝mysqlclient卻沒有任何問題。
源代碼
很簡單的小腳本,留存紀念。值得注意的一點,數據庫連接字段串中要設定字符編碼,不然默認是lanti-1,寫入會出錯。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import xlrd import pymysql import re conn = pymysql.connect(host = 'database connect address' , port = 1234 , user = 'root' , passwd = '****' , db = 'database name' , charset = 'utf8mb4' ) p = re. compile (r '\s' ) data = xlrd.open_workbook( './W020170616379651135432.xls' ) table = data.sheets()[ 0 ] t = table.col_values( 1 ) nrows = table.nrows for i in range (nrows): r1 = table.row_values(i) if len (r1[ 2 ]) = = 10 : cur = conn.cursor() cur.execute('insert into `university` (` id `, `name`, `ministry`, `city`, `level`, `memo`) \ values ( % s, % s, % s, % s, % s, % s)', (r1[ 2 ], p.sub(' ', r1[1]), p.sub(' ', r1[3]), p.sub(' ', r1[ 4 ]), r1[ 5 ], r1[ 6 ])) conn.commit() cur.close() conn.close() |
心得
寫慣了類C的語言,不太習慣python,想同時掌握兩種風格的編程語言,好痛苦啊。python編程效率的確不錯,這是我第一次用python寫實用小程序,連查帶寫帶調試,一共也就花了一個來小時。python庫與資料豐富,不愁找不到合適的^_^
數據庫寫入優化
早上閑來無事,用批量寫入優化了一下,任務秒完成,比一條條寫入快了很多, 比我預想的差別還要大。看來,沒有不好的工具,只是我們沒有用好?。?/p>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import xlrd import pymysql import re conn = pymysql.connect(host = 'database connect address' , port = 1234 , user = 'root' , passwd = '****' , db = 'database name' , charset = 'utf8mb4' ) p = re. compile (r '\s' ) data = xlrd.open_workbook( './W020170616379651135432.xls' ) table = data.sheets()[ 0 ] t = table.col_values( 1 ) nrows = table.nrows ops = [] for i in range (nrows): r1 = table.row_values(i) if len (r1[ 2 ]) = = 10 : ops.append((r1[ 2 ], p.sub(' ', r1[1]), p.sub(' ', r1[3]), p.sub(' ', r1[ 4 ]), r1[ 5 ], r1[ 6 ])) cur = conn.cursor() cur.executemany('insert into `university_copy` (` id `, `name`, `ministry`, `city`, `level`, `memo`) \ values ( % s, % s, % s, % s, % s, % s)', ops) conn.commit() cur.close() conn.close() |
python讀取excel文件遇到的問題
1、mac安裝xlrd模塊,如果cmd下執行pip install xlrd安裝不成功,可以直接去官網下載,名稱類似這樣的文件xlrd-1.0.0-py3-none-any.whl,切換到已下載的文件路徑在cmd下執行pip3 install xlrd-1.0.0-py3-none-any.whl即可
http://pypi.python.org/pypi/xlrd
2、python打開excel報xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'username'
可以確認下要打開的excel保存時是不是本身就存在兼容性等格式提示,如果有的話,需要重新建一個不存在格式問題的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import xlrd from os.path import join,abspath,dirname fname = join(dirname(dirname(abspath(__file__))), 'test1.xls' ) bk = xlrd.open_workbook(fname, encoding_override = "utf-8" ) shxrange = range (bk.nsheets) try : sh = bk.sheet_by_name( "工作表1" ) # 獲取行數 nrows = sh.nrows # 獲取列數 ncols = sh.ncols print ( "nrows %d, ncols %d" % (nrows, ncols)) # 獲取第一行第一列數據 cell_value = sh.cell_value( 1 , 1 ) # print cell_value row_list = [] # 獲取各行數據 for i in range ( 0 , nrows): row_data = sh.row_values(i) row_list.append(row_data) except : print ( "no sheet in %s named Sheet1" % fname) |
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:https://segmentfault.com/a/1190000012041140