免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2167 | 回复: 0
打印 上一主题 下一主题

使用python对txt格式的小说进行处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-09 09:41 |只看该作者 |倒序浏览
转:lifehacker

使用python对txt格式的小说进行处理



vim的确是神器,可惜sed与vim不完全通用。这篇文章受《 用vim对txt格式的小说重新排版》的启发,在此致谢!


经常下载txt的电子书,格式却不合心意,只好自己再处理。首要的就是处理段内换行。


原来的打算是定制一个vim模式,到时候处理小说时进入该模式,再使用各种快捷键。以此避免txt快捷键对日常编程的干扰。后来发现,vim不像emacs,可以定制自己的模式。(可能可以定制专用的vimrc解决,未经尝试)


于是转向脚本寻求解决办法。sed与awk是此中翘楚,首先试试。可惜早些日子学的sed已经忘的差不多了,找不到比较简洁清晰的解决办法。sed与grep类似,先读入一行,删除\n,进行各种处理,最后写入文件,再添上\n。 N可以读入下一行到当前模式匹配空间再行处理。但是我需要对整个文件进行匹配,暂时未找到解决办法。



只好再次转投python。Python有自己的re模块,应该没问题。re.sub可以进行替换。费了些时间的,是对中文的匹配。在vim中,可以用[^\x00-\xff]匹配双字节字符,然而python中却行不通。经过一番google,发现可以用[\x80-\xff]匹配汉字(perl同此,似乎两者对中文的正则支持还是有待改进)。


至此,问题初步解决:
  1. #!/usr/bin/env python  

  2. #encoding=utf-8  

  3. import re  

  4. from sys import argv  
  5.    

  6. if __name__ == '__main__':  

  7.      if len(argv) != 2:  

  8.          print 'usage: filename'

  9.      else:  

  10.          fh = open(argv[1], 'r')  

  11.          content = fh.read()  

  12.          out = re.sub('\n([\x80-\xff])', r'\1', content)  

  13.         print out
复制代码
规范行首:
  1. #!/usr/bin/env python  

  2. #encoding=utf-8  

  3. import re  

  4. from sys import argv  

  5.    

  6. if __name__ == '__main__':  

  7.      if len(argv) != 2:  

  8.          print 'usage: filename'

  9.      else:  

  10.          fh = open(argv[1], 'r')  

  11.         content = fh.read()  

  12.          out = re.sub(' +([\x80-\xff])', r'     \1', content)  

  13.         print out
复制代码
当然,下载来的文档通常是GB2312,需要自己转换为utf8再行处理,可以参考我的《python 中文编码笔记》


在win下,有个优秀的文本处理工具可以利用,叫cnbook。在百度的fmddlmyy贴吧可以下载到最新版本。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP