python办公自动化(二) | 读取.txt、.data、.doc和.docx文档的部分内容

举报
文科数据员 发表于 2021/03/10 22:18:42 2021/03/10
【摘要】 python的文件操作,是python办公自动化的最基础部分。今天,数据猿就尝试对四种格式的文档,进行部分内容读取的操作,实现读取文件操作的办公自动化~目录如下——读取文本文档with 语句读取部分内容python最基本的文件读取是采用open()函数,但需要close()来关闭文件,否则会报错,所以建议使用with语句来读取一般的txt文件。with open('file.txt',enc...

python的文件操作,是python办公自动化的最基础部分。今天,数据猿就尝试对四种格式的文档,进行部分内容读取的操作,实现读取文件操作的办公自动化~

目录如下——


读取文本文档

with 语句读取部分内容

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库自动读写多编码格式的文件


本文系纯原创,如有纰漏,敬请指出

文字编辑:数据猿Riggle

在读新闻与传播专硕研究生,沉迷文科大数据,目前写论文、找工作ing

首发平台:文科数据员(ID:HSS_data)


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。