筆記:Python3 數據處理html
1、csv數據處理
python
Csv文件格式:
看下.csv文件的定義:
逗號分隔值(Comma-Separated Values,CSV,有時也稱爲字符分隔值,由於分隔字符也能夠不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味着該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最多見的是逗號或製表符。一般,全部記錄都有徹底相同的字段序列。
如一下格式:
27,20,14,15,14,12,94,64,37,1015,1013,1009,7,5,2,21,8,35,0.00,,,152
.csv文件能夠直接用excel或者相似軟件打開,樣子都是咱們常見的表格形式。
新建一個csv文件,如test.csv,內容以下:linux
1,2,3,4,5,6,7,8,9,10
10,9,8,7,6,5,4,3,2,1
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/7 20:26 # @Author : yangyuanqiang # @File : demon1.py import csv fileName = "test.csv" #經過csv模塊處理數據 with open(fileName, "r", encoding="utf-8") as f: text = csv.reader(f) for line in text: for i in line: print(i) #經過字符串切割處理數據 # with open(fileName, "r", encoding="utf-8") as f: # for line in f: # for i in line.split(","): # print(i.strip())
以上實例輸出的結果session
1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1
注意:將數據存儲爲後綴.csv文件格式,可使用excel程序打開.csv文件,會自動以逗號爲換行url
2、excel數據處理spa
python提供有第三方庫來支持對excel的操做,python處理excel文件用的第三方模塊庫有xlrd、xlwt、xluntils和pyExcelerator,除此以外,python處理excel還能夠用win32com和openpyxl模塊。下面咱們先安裝第三方庫
Pip install xlrd
Pip install xlwt
Pip install xluntils
Pip install pyExcelerator
Xlrd只能進行讀取excel文件,無法進行寫入文件,xlwt能夠寫入文件,可是不能在已有的excel的文件上進行修改,若是有這個需求,就須要使用xluntils模塊了,pyExcelerator模塊與xlwt相似,也能夠用來生成excel文件
新建一個excel文件,名爲test.xlsx,內容以下:3d
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/7 21:19 # @Author : yangyuanqiang # @File : demon2.py #讀取excel表的數據 import xlrd data = xlrd.open_workbook("test.xlsx") table = data.sheets()[0] #讀取excel表裏的下標表格 rows = table.nrows #查看有多少行數據 print("共有{0} ".format(rows) + " 行數據") cols = table.ncols #查看有多少列數據 print("共有{0} ".format(cols) + " 列數據") #一行一行取數據 for i in range(rows): print(table.row_values(i))
以上實例輸出的結果excel
共有5 行數據 共有3 列數據 ['aaa', 'bbb', 'ccc'] [123.0, 456.0, 789.0] ['abc', 'abc', 'abc'] ['ddd', 'eee', 'fff'] ['12*', 'df1', '3dd']
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/7 21:19 # @Author : yangyuanqiang # @File : demon2.py #讀取excel表的數據 import xlrd data = xlrd.open_workbook("test.xlsx") table = data.sheets()[0] #讀取excel表裏的下標表格 rows = table.nrows #查看有多少行數據 # print("共有{0} ".format(rows) + " 行數據") cols = table.ncols #查看有多少列數據 # print("共有{0} ".format(cols) + " 列數據") #一行一行取數據 # for i in range(rows): # print(table.row_values(i)) print("##"*10) #一列一列取數據 for j in range(cols): print(table.col_values(j))
以上實例輸出的結果code
#################### ['aaa', 123.0, 'abc', 'ddd', '12*'] ['bbb', 456.0, 'abc', 'eee', 'df1'] ['ccc', 789.0, 'abc', 'fff', '3dd']
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/7 21:19 # @Author : yangyuanqiang # @File : demon2.py #讀取excel表的數據 import xlrd data = xlrd.open_workbook("test.xlsx") table = data.sheets()[0] #讀取excel表裏的下標表格 rows = table.nrows #查看有多少行數據 # print("共有{0} ".format(rows) + " 行數據") cols = table.ncols #查看有多少列數據 # print("共有{0} ".format(cols) + " 列數據") #一行一行取數據 # for i in range(rows): # print(table.row_values(i)) # print("##"*10) # #一列一列取數據 # for j in range(cols): # print(table.col_values(j)) print("###"*10) #按每行取第一個列的數據 for row in range(rows): for col in range(cols): cell = table.cell_value(row, col) print(cell)
以上實例輸出的結果orm
############################## aaa bbb ccc 123.0 456.0 789.0 abc abc abc ddd eee fff 12* df1 3dd
寫入excel文件
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/7 22:02 # @Author : yangyuanqiang # @File : demon3.py #寫excel文件 import xlwt workbook = xlwt.Workbook() sheet1 = workbook.add_sheet("test1", cell_overwrite_ok=workbook) sheet1.write(0,0,"hello1") sheet1.write(0,1,"hello2") sheet1.write(0,2,"hello3") sheet1.write(1,0,"world1") sheet1.write(1,1,"world2") sheet1.write(1,2,"world3") workbook.save("testwrite.xls") print("create ok")
以上實例輸出的結果
create ok
在當前目錄下建立了一個testwrite.xls文件,內容以下:
三、pdf數據處理
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/9 18:04 # @Author : yangyuanqiang # @File : demon5.py #Python讀出pdf文件 from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfparser import PDFPage from pdfminer.pdfinterp import PDFResourceManager, PDFTextExtractionNotAllowed from pdfminer.pdfinterp import PDFPageInterpreter from pdfminer.pdfdevice import PDFDevice from pdfminer.layout import LAParams from pdfminer.converter import PDFPageAggregator #獲取文檔對象,你把algorithm.pdf換成你本身的文件名便可。 fp=open("test.pdf","rb") #建立一個與文檔相關聯的解釋器 parser=PDFParser(fp) #PDF文檔對象,提供密碼初始化,沒有就不用帶password參數。 doc=PDFDocument() parser.set_document(doc) doc.set_parser(parser) doc.initialize() #檢查文件是否容許文本提取 if not doc.is_extractable: raise PDFTextExtractionNotAllowed #連接解釋器和文檔對象 # parser.set_document(doc) #doc.set_paeser(parser) #初始化文檔 #doc.initialize("") #建立PDF資源管理器對象來存儲共享資源 resource=PDFResourceManager() #參數分析器 laparam=LAParams() #建立一個聚合器 device=PDFPageAggregator(resource, laparams=laparam) #建立PDF頁面解釋器 interpreter=PDFPageInterpreter(resource,device) #使用文檔對象獲得頁面集合 for page in doc.get_pages(): #使用頁面解釋器來讀取 interpreter.process_page(page) #使用聚合器來獲取內容 layout=device.get_result() for out in layout: if hasattr(out, "get_text"): print(out.get_text())
html轉pdf文件
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/6/9 18:08 # @Author : yangyuanqiang # @File : demon6.py #抓取aming的linux教程,而後製做成pdf文件 #先抓取每一個的網頁,而後生成pdf文件 import codecs import os import sys import pdfkit import requests base_url = 'http://www.apelearn.com/study_v2/' if not os.path.exists("aming"): os.mkdir("aming") os.chdir("aming") s = requests.session() for i in range(1, 27): url = base_url + 'chapter' + str(i) + '.html' print(url) file = str(i) + '.pdf' print(file) config = pdfkit.configuration(wkhtmltopdf=r"D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe") try: pdfkit.from_url(url, file) except: continue