python的文件操作,是python辦公自動化的最基礎部分。今天,數據猿就嘗試對四種格式的文檔,進行部分內容讀取的操作,實現讀取文件操作的辦公自動化~
目錄如下——
python最基本的文件讀取是採用open()函數,但需要close()來關閉文件,否則會報錯,所以建議使用with語句來讀取一般的txt文件。
with open('file.txt',encoding='utf-8',sep='\n') as f:
alltxt = f.read()如果要將其中一部分讀取出來,怎麼辦呢?
有兩種方法可以解決問題。
方法一:.find()定位下標法使用.find()查找目標文字的下標,然後利用此下標進行字符串切片。
s = alltxt.find('這是這部分開頭。')
e = alltxt.find('這是這部分結尾。')
alltxt[s:e]方法二:.index()索引法index()索引法和find()方法基本一致。
s_txt = '這是這部分開頭。'
e_txt= '這是這部分結尾。'
alltxt[alltxt.index(s_txt):alltxt.index(e_txt)+len(e_txt)]
find(substr, beg=0, end=len(string))
在[beg, end]範圍內查找substring,找到返回substr的起始下標,否則返回 -1。
index(substr,beg=0,end=len(string))
同find()類似,不同的是,如果未找到substr,則返回一個異常 ValueError: substring not found。
如果需要讀取的文件是.csv和.data文件,這類文件類似表格,with語句的讀取方式就相對複雜,因此需要採用pandas庫來讀取。
pandas讀取.data文件學機器學習的小夥伴會發現,在使用最初的數據集的時候,需要與UCI的機器「機器學習倉庫:學習和智能系統中心」(Machine Learning Repository:Center for Machine Learning and Intelligent Systems)的數據集打交道。
如果是使用庫自帶的數據集還好,直接load_iris(),如果需要下載這個網站的最新數據集,則要下載此類文件——
![]()
我們會發現,這裡的鳶尾花數據集是.data格式。要想讀取.data文件,就需要使用pandas。如下所示——
import pandas as pd
data=pd.read_csv('iris.data',names=['sepal_lengh_cm','sepal_width_cm','petal_length_cm','petal_width_cm','class'],sep=",",skiprows=1)
data.head(5)![]()
pd.read_csv()既可以讀取csv文件,還可以讀取.data和。.txt文件,非常好用。但是,需要注意設定sep=','根據數據需要調整分隔符。
讀取doc文檔在日常工作中,我們經常會遇到,給定一個.doc文檔,要求從中提取一部分文字存起來。
但是,.doc格式比較老,python中沒有庫讀寫.doc,所以就需要一個系統工具的庫(這裡是win32com)來打開word應用,將.doc轉存為另存為.docx,再使用python-docx進行讀寫,以完成自動化操作。
首先,導入必要的庫。這裡需要os庫獲取當前路徑和電腦絕對路徑,以此找到word應用並打開doc文件。
# 將.doc文件轉成.docx
import os
import time
import win32com
from win32com.client import Dispatch然後,構造另存函數。主要流程為
打開word應用——找到目標文件——打開目標文件——另存目標文件——退出。
def doc2docx(path):
w = win32com.client.Dispatch('Word.Application')
w.Visible = 0
w.DisplayAlerts = 0
doc = w.Documents.Open(path)
# 這裡必須要絕對地址,保持和doc路徑一致
newpath = allpath+'\目標讀取文檔.docx'
time.sleep(3)# 暫停3s,否則會出現-2147352567,錯誤
doc.SaveAs(newpath,12,False,"",True,"",False,False,False,False)
# doc.Close() 開啟則會刪掉原來的doc
w.Quit()# 退出
return newpath
allpath = os.getcwd()
print(allpath)
doc2docx(allpath+'\目標讀取文檔.doc')讀取docx文檔部分內容導入python-docx庫,注意這裡寫import docx即可。
但是,pip下載第三方庫的時候要下載python-docx,否則會出錯。
docx是按照段落讀取的,所以需要列表解析式+.join()來形成一個長字符串,以便進行上文所示的字符串切片,從而讀取部分內容。
import docx
fn = r'目標讀取文檔.docx'
doc = docx.Document(fn)
pa = [p.text for p in doc.paragraphs]
pa1 = ''.join(pa)使用上文中的str.index索引法讀取部分內容——
start_txt = 'A'
final_txt = 'B'
pa2 = pa1[pa1.index(start_txt):pa1.index(final_txt)+len(final_txt)]
pa2
往期精品:
python辦公自動化(一) | chardet庫自動讀寫多編碼格式的文件
社會網絡分析(一) | python的Networkx庫基礎知識
社會網絡分析(二) | 論文閱讀:中國與國際媒體互引的社會網絡分析
社會網絡分析(三) | 社會網絡分析中的基本概念
數據可視化入門(三) | matplotlib柱形圖進行實驗數據的對比
本文系純原創,如有紕漏,敬請指出
文字編輯:數據猿Riggle
首發平臺:微信公眾號:文科數據