找回密码
 立即注册
搜索
查看: 1895|回复: 10

[软件] python读取word的诡异问题

[复制链接]
发表于 2022-8-21 23:50 | 显示全部楼层 |阅读模式
用的python-docx这个库,doc文件转docx读取,99%的情况下很正常,就是某些未知的情况下,某个文件的中间一小段文字“abcdef”,python会读出变成“abc”,也可能是空白,实际doc文件里显示是很正常的“abcdef”,其他文件的同样的位置读取也是正常的。对那个出问题的doc文件,随便找个文字删掉然后再输入同样的文字,保存之后就读取正常了。我想做了个文件文本比较对比看看,对比结果也很意外,原以为就“abcdef”这个地方会出现不一致,实际是完全一致。不一致的地方,自己完全没有修改过,比如原始文件的“ÉE”,修改保存后就变成了“蒃”,虽然doc里面显示还是“ÉE”。实在无法理解,文件本身是公司内部文件,没法上传了,想请教一下解决思路,谢谢了。PS对比软件是Beyond Compare 4,转换用的是默认的UTF-16LE BOM
回复

使用道具 举报

     
发表于 2022-8-22 00:51 来自手机 | 显示全部楼层
vba调用office转docx再读?或者调用openoffice转docx
回复

使用道具 举报

     
发表于 2022-8-22 01:57 | 显示全部楼层
把docx文件解压,在里面的xml里搜索你这几个字符看是什么样子的
回复

使用道具 举报

     
发表于 2022-8-22 02:06 | 显示全部楼层
先转docx比较好,doc都是二进制格式,找问题太难了。python应该有办法调用word的COM借口转docx
回复

使用道具 举报

     
发表于 2022-8-22 06:37 | 显示全部楼层
python-docx is a Python library for creating and updating Microsoft Word (.docx) files.

强烈建议只用它处理DOCX文件,而不处理DOC文件
回复

使用道具 举报

     
发表于 2022-8-22 07:10 来自手机 | 显示全部楼层
Python众多库读doc都是用antiword,或者直接调用word另存为其他格式

—— 来自 Xiaomi MI 8, Android 10上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

 楼主| 发表于 2022-8-22 07:24 | 显示全部楼层
lyflyflxf 发表于 2022-8-22 06:37
强烈建议只用它处理DOCX文件,而不处理DOC文件

没办法原生的报告都是doc的,不可能改的,只能让转成docx后再搞。
回复

使用道具 举报

     
发表于 2022-8-22 07:50 | 显示全部楼层
3楼+1
回复

使用道具 举报

     
发表于 2022-8-22 07:58 | 显示全部楼层
perfaceNext 发表于 2022-8-22 07:24
没办法原生的报告都是doc的,不可能改的,只能让转成docx后再搞。

那就试着换几种转换为DOCX的方法,看哪种比较稳定吧
回复

使用道具 举报

发表于 2022-8-22 08:04 | 显示全部楼层
非法字符?复制进vscode把显示隐藏字符打开看看
回复

使用道具 举报

 楼主| 发表于 2022-8-22 22:36 | 显示全部楼层
归蝶 发表于 2022-8-22 01:57
把docx文件解压,在里面的xml里搜索你这几个字符看是什么样子的

这边办法好,虽然我不懂xml,大概是<w:smartTag>的问题,感觉挺麻烦了。
https://github.com/python-openxml/python-docx/issues/825,好像和我的问题差不多
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-9-22 11:42 , Processed in 0.067819 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表