python的文件操作,是python办公自动化的最基础部分。今天,数据猿就尝试对四种格式的文档,进行部分内容读取的操作,实现读取文件操作的办公自动化~
目录如下——
python最基本的文件读取是采用open()
函数,但需要close()
来关闭文件,否则会报错,所以建议使用with语句来读取一般的txt文件。
with open('file.txt',encoding='utf-8',sep='\n') as f:
alltxt = f.read()
如果要将其中一部分读取出来,怎么办呢?
有两种方法可以解决问题。
使用.find()查找目标文字的下标,然后利用此下标进行字符串切片。
s = alltxt.find('这是这部分开头。')
e = alltxt.find('这是这部分结尾。')
alltxt[s:e]
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
库来读取。
学机器学习的小伙伴会发现,在使用最初的数据集的时候,需要与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
格式比较老,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')
导入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
●解一道反常的Pandas题
●12000+字超详细 SQL 语法速成!
后台回复“入群”即可加入小z干货交流群