鱼C论坛

 找回密码
 立即注册
查看: 6204|回复: 5

[已解决]有人用python读取RTF格式文件么?

[复制链接]
发表于 2017-7-15 16:47:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
环境:
win10 64位
python3.6 32位
VSCode编辑器


问题:
当我读取RTF格式文件时,读取到的都是
  1. \par 2017-7-12 13:20:22  \'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce
  2. \par 2017-7-12 13:20:28  \'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce
  3. \par 2017-7-12 13:20:34  \'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce
  4. \par 2017-7-12 13:20:40  \'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce
  5. \par 2017-7-12 13:20:46  \'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce
  6. \par 2017-7-12 13:20:52  \'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce
  7. \par 2017-7-12 13:20:58  \'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce
复制代码


当我用word打开时,却显示的是中文:
2017-7-12 13:20:52  执行了一次
2017-7-12 13:20:58  执行了一次
2017-7-12 13:21:04  执行了一次
2017-7-12 13:21:10  执行了一次
2017-7-12 13:21:16  执行了一次
2017-7-12 13:21:22  执行了一次
2017-7-12 13:21:28  执行了一次


请问:如何在python里面读取RTF内容转换为中文?我需要提取里面的一些特定中文信息,

折腾一天了,愣是读取不到中文,网上有说用pyrtf这个第三方包,下载是下载了,可导入就提示找不到里面的一个类型,而且还找不到使用说明文档,实在没办法求关照。。。
最佳答案
2017-7-15 17:57:49
  1. >>> s=r"\'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce"
  2. >>> bytearray(int(x,16)for x in s.split(r"\'")[1:]).decode('gbk')
  3. '执行了一次'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-15 17:40:12 | 显示全部楼层
RTF文件格式编码说明 http://justke123.iteye.com/blog/981579
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-15 17:57:49 | 显示全部楼层    本楼为最佳答案   
  1. >>> s=r"\'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce"
  2. >>> bytearray(int(x,16)for x in s.split(r"\'")[1:]).decode('gbk')
  3. '执行了一次'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-16 23:42:21 | 显示全部楼层

万分感谢....看来还是基础不够牢,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-17 12:49:57 | 显示全部楼层

请问下,为什么我把你的推导式改成单字解析中文就不行了?因为文本里面还包含数字和IP地址等,这样就并不是没个元素都可以这么直接转为中文了
  1. s=r"\'d0\'dc\'cf\'fe\'c1\'e1(829)  \'b5\'c7\'c2\'bd\'cf\'b5\'cd\'b3(/login.asp)[IP:192.168.1.252]"
复制代码

比如这样的,当传入e1(829)时就会报错无法转换了,可我传入单独的e1解析出来的好像编辑器无法显示,是一个方块了,  

我测试方法如下:
  1. a=r"\'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce"
  2. print('a:\t\t'+a)
  3. print('a的中文:\t'+bytearray(int(x,16)for x in a.split(r"\'")[1:]).decode('gbk'))

  4. print('a的列表b:')
  5. b=a.split(r"\'")[1:]    #去掉第一个空的
  6. print(b)

  7. print('测试输出中文b:')
  8. print('b的中文:\t'+bytearray(int(x,16)for x in b[0:]).decode('gbk'))

  9. print('b的中文:\t'+bytearray(int("d6",16)).decode('gbk'))
复制代码


输出结果:
  1. a:                \'d6\'b4\'d0\'d0\'c1\'cb\'d2\'bb\'b4\'ce
  2. a的中文:        执行了一次
  3. a的列表b:
  4. ['d6', 'b4', 'd0', 'd0', 'c1', 'cb', 'd2', 'bb', 'b4', 'ce']
  5. 测试输出中文b:
  6. b的中文:        执行了一次
  7. b的中文:
复制代码


b的中文后面看不到字,好像单个转换总成功不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 14:24:28 | 显示全部楼层
mr_yang4 发表于 2017-7-17 12:49
请问下,为什么我把你的推导式改成单字解析中文就不行了?因为文本里面还包含数字和IP地址等,这样就并不 ...

你先去学一下字符的编码知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 08:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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