解决python大批量读写.doc文件的问题


Posted in Python onMay 08, 2018

前言:

java语言读写.doc的出现乱码问题:

大家都知道当我们利用java语言读写.doc文件时,无论是利用流的方式将.doc文件的内容输出到控制台(console),还是将其写到其他文件中,无论你采取何种编码格式(utf-8,gbk等)输出,你看到的内容99%都是乱码。

java语言读写.doc的出现乱码问题原因分析:

.doc文件是微软开发的用于办公的编辑文字的软件之一,如果说一篇word文档的字体格式采用的是utf-8,那么你采用utf-8格式读写该文档,应该能够正确输出汉字,但是一旦你的word文档里面的字体的尺寸改变,字体加上颜色属性,字体加上某种style时,那么本篇word文档的格式就变了,而不再是utf-8,因此采用utf-8格式输出99%都是乱码。

利用java语言读写.doc文档避免乱码的解决方案:(sun公司pk微软公司)

可以利用sun公司开发的poi包,该包提供修改微软办公软件的接口,利用poi包读写.doc文件,通常就不会产生乱码。如果看到这里你就大概认为,我终于可以利用java去处理.doc文件了,那么我想说的是,你开心的太早了。据我所知,截止到2017年12月22日,poi包的最新版本是3.1.7版,你也许对该版本没有什么概念,3.1.7版本的poi包只能处理微软2007版本的word,excel,ppt等,也就是说poi3.1.7版本的jar包不支持处理咱们电脑上顶配的word2016,因此可以说你可以放弃使用java读写word2016了。但是你也可以尝试用其他的接口去处理word,但是效率都不会比poi接口高,幸运的是,官网显示poi最新版本将在2017年12月份推出,但是截止到2017年12月22日,我还没有在官网看到此jar包。

正文:

python在处理文档的语言处理方面比java更胜一筹,毕竟python结合正则表达式在自然语言处理方面还是很强势的。最近在做深度学习的项目,需要解析并处理几百个数量级的.doc文件。众所周知,python读写.txt文档可以说一路畅通无阻,不管你中文是什么格式;python在读写.docx文档时,也比较畅通,最多你需要在命令行安装python-docx (0.8.6),就可以读写.docx文档了,具体读写方案,下述。

问题:python无法读取.doc文件(而不是.docx文件)

解决方案:利用python将大批.doc文件转化为.docx文件,再读写.docx文件

问题分析:python利用python-docx (0.8.6)库可以读取.docx文件或.txt文件,且一路畅通无阻,而对.doc文件本身python是无能为力的,那有很多同学就不服气,我手动把.doc文件的后缀名改为.docx或.txt不就解决问题了吗?答案是不能的,简单修改后缀名,那么文件就被你玩坏了,别说打不开,就是打开也是天书啊(乱码)。python无法操作.doc文件是他的先天不足,但是我们不要钻牛角尖一定要在互联网上找到一种源码直接读取.doc文件,一调用就好了,但是不幸的是,你可能在网上也找不到解决方案。正当我一筹莫展之时,我将.doc文档利用手动的方式“另存为”.docx文档,就能够成功打开转化后的.docx文档,于是我就尝试利用代码方式完成这个手动的“另存为”功能,问题得以解决。

直接上python代码(首先你需要先安装pypewin32库):

# -*- coding: utf-8 -*-:
import sys
import pickle
import re
import codecs
import string
import shutil
from win32com import client as wc
def doSaveAas(): # 想批处理文件,你就用for循环呗,我一次性处理了100多个文件,代码执行不超过2分钟,可以解决问题,目标文件路径可以自由改动,大家注意SaveAs方法中的参数,好多啊,别写错了
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(u'C:\\Users\\X\\PycharmProjects\\1\\大家好.doc')  # 目标路径下的文件
doc.SaveAs(u'C:\\Users\\X\\PycharmProjects\\1\\我是一枚小小的程序员X007.docx', 12, False, "", True, "", False, False, False, False) # 转化后路径下的文件 
doc.Close()
word.Quit()

转化为.docx文件后,在处理.docx文件,一路畅通无阻,网上很多解决方案,这里我就不详细说了,有问题,可以给我留言哟

以上这篇解决python大批量读写.doc文件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的设计模式编程入门指南
Apr 02 Python
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
Python中的descriptor描述器简明使用指南
Jun 02 Python
Python协程的用法和例子详解
Sep 09 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
在pycharm中设置显示行数的方法
Jan 16 Python
Python 3 判断2个字典相同
Aug 06 Python
通过Python编写一个简单登录功能过程解析
Sep 04 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
python在每个字符后添加空格的实例
May 07 #Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 #Python
python 读取DICOM头文件的实例
May 07 #Python
解决Python requests库编码 socks5代理的问题
May 07 #Python
基于python requests库中的代理实例讲解
May 07 #Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 #Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 #Python
You might like
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
php编写简单的文章发布程序
2015/06/18 PHP
Javascript 自定义类型方法小结
2010/03/02 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
javascript中的面向对象
2017/03/30 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
小程序实现发表评论功能
2018/07/06 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
Python多进程同步简单实现代码
2016/04/27 Python
Python性能提升之延迟初始化
2016/12/04 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
Html5定位终极解决方案
2020/02/05 HTML / CSS
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
如何实现一个自定义类的序列化
2012/05/22 面试题
毕业生求职推荐信
2013/11/04 职场文书
清华大学自主招生自荐信
2014/01/29 职场文书
活动倡议书范文
2014/05/13 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
求职简历自荐信
2014/06/18 职场文书
创建文明城市倡议书
2015/04/28 职场文书
房屋所有权证明
2015/06/19 职场文书
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android