python標準庫+內置函數+第三方庫:1-文件讀寫

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()
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容