此文仅用来记录自己解决问题的过程!!!
一般有Python有直接读取.pdf文件的库来解决该问题,但是自己尝试了很久,没有从相关库中导出自己想要的内容。想到其原因也不晓得对不对,首先.pdf文件是公认的比较稳定的文件格式(相对于.doc和.docx文件),一般都不能对其进行修改,所以最好用功能比较强大的转换器转换为.docx文件后对其内容进行提取。
首先,推荐一款免费的转换软件Solid Converter V8(链接:https://pan.baidu.com/s/1YPc5PD08sMzU8OXd7MGtXA 提取码:8y59 ), 破解需要注册码,百度就有,下面贴出来:
1名称:任意
电子邮件:china@163.com
机构名称:office
解锁码:FXHF
2 名称 任意
机构名称 任意
电子邮箱: info@x-berry.com
解锁码: MWHS
然后,需要安装Python读取docx文件相关的库,这里切记是python-docx库,而不是其他的,用impot直接导入的时候这样导入import docx就可以。
最后,贴一个相关的代码,使用了正则表达式来提取有关内容:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:qinxaioyu Time:2018/12/17
import docx
from docx import Document
import re # 使用正则表达式进行内容提取
'''
解析docx文件,保存到txt文件中
'''
if __name__ == '__main__':
path = 'E:\组合 1.docx' # 需要读取的.docx文件
res = 'E:\data.txt' # 提取数据的存到.txt文件中
document = Document(path) #读取文件
tables = document.tables #找到docx中间中所有表格
print(len(document.paragraphs))
names = []
max_length = 0
for i in range(len(document.paragraphs)):
a = re.findall(r'数据文件名\t:(.*?).lcd', document.paragraphs[i].text) #正则提取内容
if len(a) > 0:
names.append(str(a[0]))
if len(str(a[0])) > max_length:
max_length = len(str(a[0]))
with open(res,'w') as f:
f.write('name' + ' '*100 + '保留时间' + ' '*10 + '面积' + '\n')
j = 0
for table in tables: # 提取表格数据进行写入
f.write(names[j] + ' '*((max_length - len(names[j]))*2 + 10) + str(table.cell(1,2).text) + ' '*10 +\
str(table.cell(1,3).text) + '\n')
j += 1
f.close()