使用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 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/usr/bin/env python #encoding=utf-8 import re from sys import argv if __name__ = = '__main__' : if len (argv) ! = 2 : print 'usage: filename' else : fh = open (argv[ 1 ], 'r' ) content = fh.read() out = re.sub( '\n([\x80-\xff])' , r '\1' , content) print out |
规范行首:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/usr/bin/env python #encoding=utf-8 import re from sys import argv if __name__ = = '__main__' : if len (argv) ! = 2 : print 'usage: filename' else : fh = open (argv[ 1 ], 'r' ) content = fh.read() out = re.sub( ' +([\x80-\xff])' , r ' \1' , content) print out |
当然,下载来的文档通常是GB2312,需要自己转换为utf8再行处理,可以参考我的《python 中文编码笔记》
在win下,有个优秀的文本处理工具可以利用,叫cnbook。在百度的fmddlmyy贴吧可以下载到最新版本。
posted on 2011-02-04 22:09 lifehacker 阅读(5295) 评论(3) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!