python標準庫+內置函數+第三方庫
欲善其事,必先利其器
這其器必是python的標準庫+內置函數,話說許多第三方庫, 也是對標準庫的使用,進行封裝,使得使用起來更方便。
這些庫以使用場景來分類:
一. 文件讀寫
二. 網絡抓取和解析
三. 數據連接
四. 數清洗轉換
五. 數據計算和統計分析
六. 圖像和視頻處理
七. 音頻處理
八. 數據挖掘/機器學習/深度學習
九. 數據可視化
十. 交互學習
十一. 集成開發
現來學習第一項:文件讀寫
文件的讀寫包括常見的txt、Excel、xml、二進制文件以及其他格式的數據文本,主要用于本地數據的讀寫。
1.1.open(name[, mode[, buffering]])
# 類型:Python內置函數
# 描述:Python默認的文件讀寫方法
f = open("/open.txt","w")
f.write("python標準庫+內置函數+第三方庫")
f.close()
f = open("/open.txt", "r")
p_text = f.read()
print(p_text)
f.close()
1.2.pandas.read_*
# 類型:第三方庫
# 描述:Pandas自帶的read文件方法,例如ead_csv、
#read_fwf、 read_table等,用于文本、Excel、
#二進制文件、HDF5、表格、SAS文件、SQL數
1.3.lxml
# 類型:第三方庫
# 描述:xml和HTML讀取和解析
"""
lxml是python的一個解析庫,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高
XPath,全稱XML Path Language,即XML路徑語言,它是一門在XML文檔中查找信息的語言,它最初是用來搜尋XML文檔的,但是它同樣適用于HTML文檔的搜索
XPath的選擇功能十分強大,它提供了非常簡明的路徑選擇表達式,另外,它還提供了超過100個內建函數,用于字符串、數值、時間的匹配以及節點、序列的處理等,幾乎所有我們想要定位的節點,都可以用XPath來選擇
"""
from lxml import etree
text='''
<div>
<ul>
<li class="item-0"><a href="link1.html">第一個</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0"><a href="link5.html">a屬性</a>
</ul>
</div>
'''
html=etree.HTML(text) #初始化生成一個XPath解析對象
result=etree.tostring(html,encoding='utf-8') #解析成字節
print("解釋成字節:")
print(result)
result_list=etree.tostringlist(html,encoding='utf-8') #解析成列表
print("解釋成列表")
print(result_list)
result_node = etree.HTML("text",etree.HTMLParser())
html = result_node.xpath('//*')
print("獲取所有節點:")
print(html)
1.4.xml
# 類型:Python標準庫
# 描述:xml對象解析和格式化處理
xml文件:
<collection shelf="New Arrivals">
<works title="電影">
<names>敦刻爾克</names>
<author>諾蘭</author>
</works>
<works title="書籍">
<names>我的職業是小說家</names>
<author>村上春樹</author>
</works>
</collection>
Python解析XML實例: Python對XML的解析采用SAX (simple API for XML )模塊。
#!/usr/bin/python3
#encoding=utf-8
import xml.sax
import xml.sax.handler
class WorksHandler(xml.sax.ContentHandler):
def __init__(self):
self.CurrentData = ""
self.names = ""
self.author = ""
#元素開始事件處理
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "works":
print("***內容***")
title = attributes["title"]
print("類型:",title)
#元素結束事件處理
def endElement(self, tag):
if self.CurrentData == "names":
print("名稱:",self.names)
elif self.CurrentData == "author":
print("作者:",self.author)
self.CurrentData = ""
#內容事件處理
def characters(self, content):
if self.CurrentData == "names":
self.names = content
elif self.CurrentData == "author":
self.author = content
if (__name__ == "__main__"):
#創建一個XMLReader
parser = xml.sax.make_parser()
parser.setFeature(xml.sax.handler.feature_namespaces,0)
#重寫ContextHandler
Handler = WorksHandler()
parser.setContentHandler(Handler)
parser.parse("works.xml")
1.5.xpath
# 類型:第三方庫
# 描述:xml對象解析和格式化處理
#用例如上
XPath常用規則:
xpath表達符.jpg
1.6.win32com
# 類型:第三方庫
# 描述:有關Windows系統操作、Office(Word、Excel等)文件讀寫等的綜合應用庫
import win32com
from win32com.client import Dispatch, constants
w = win32com.client.Dispatch('Word.Application')
# 或者使用下面的方法,使用啟動獨立的進程:
# w = win32com.client.DispatchEx('Word.Application')
# 后臺運行,不顯示,不警告
w.Visible = 0
w.DisplayAlerts = 0
# 打開新的文件
doc = w.Documents.Open( FileName = filenamein )
# worddoc = w.Documents.Add() # 創建新的文檔
# 插入文字
myRange = doc.Range(0,0)
myRange.InsertBefore('Hello from python!')
# 使用樣式
wordSel = myRange.Select()
wordSel.Style = constants.wdStyleHeading1
# 正文文字替換
w.Selection.Find.ClearFormatting()
w.Selection.Find.Replacement.ClearFormatting()
w.Selection.Find.Execute(OldStr, False, False, False, False, False, True, 1, True, NewStr, 2)
# 表格操作
doc.Tables[0].Rows[0].Cells[0].Range.Text ='123123'
worddoc.Tables[0].Rows.Add() # 增加一行
# 轉換為html
wc = win32com.client.constants
w.ActiveDocument.WebOptions.RelyOnCSS = 1
w.ActiveDocument.WebOptions.OptimizeForBrowser = 1
w.ActiveDocument.WebOptions.BrowserLevel = 0 # constants.wdBrowserLevelV4
w.ActiveDocument.WebOptions.OrganizeInFolder = 0
w.ActiveDocument.WebOptions.UseLongFileNames = 1
w.ActiveDocument.WebOptions.RelyOnVML = 0
w.ActiveDocument.WebOptions.AllowPNG = 1
w.ActiveDocument.SaveAs( FileName = filenameout, FileFormat = wc.wdFormatHTML )
# 打印
doc.PrintOut()
# 關閉
# doc.Close()
w.Documents.Close(wc.wdDoNotSaveChanges)
w.Quit()