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

使用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同此,似乎两者对中文的正则支持还是有待改进)。

至此,问题初步解决:

view sourceprint?01 #!/usr/bin/env python

02 #encoding=utf-8

03 import re

04 from sys import argv

05

06

07 if __name__ == '__main__':

08 if len(argv) != 2:

09 print 'usage: filename'

10 else:

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

12 content = fh.read()

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

14 print out

规范行首:

view sourceprint?01 #!/usr/bin/env python

02 #encoding=utf-8

03 import re

04 from sys import argv

05

06

07 if __name__ == '__main__':

08 if len(argv) != 2:

09 print 'usage: filename'

10 else:

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

12 content = fh.read()

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

14 print out

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

分类:默认分类 时间:2012-01-04 人气:15
本文关键词:
分享到:

相关文章

  • [python]抓取股票交易记录 2012-07-08

    #!/usr/bin/python #DownByDate.py sh600115 2014-12-29 2015-3-15 #DownByDate.py stock_num start_date end_date #http://stock.gtimg.cn/data/index.php?appn=detail&action=download&c=sh600115&d=20141229 #sh600115_2014-12-29.txt import sys import

  • python学习第十一章--文件和素材 2012-07-15

    1.打开文件:open函数,它接受一个文件名作为唯一的强制参数。如果只提供一个参数的话,那么我们可以获得能获取文件内容的文件对象。如果要向文件内写入内容,则必须提供一个模式参数,open函数中的模式参数只有几个值,如下图: 其中b模式表示可以处理二进制文件,比如rb可以用来读取一个二进制文件。 open函数的第3个参数控制着文件的缓冲,如果参数是0或者是false,IO就是无缓冲的(所有的读写操作都直接针对硬盘);如果是1或者是true,IO就是有缓冲的(意味着python使用内存来代替硬盘,让

  • Python中文分词组件jieba 2012-07-29

    jieba "结巴"中文分词:做最好的Python中文分词组件 "Jieba" Feature 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义; 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 支持繁体分词 支持自定义词典 在线演示 http://jiebademo.ap01.aws.af.cm/ (Powered by Appfog) Python 2.x

  • python文件操作函数实例讲解 2012-08-17

    Python中文件操作可以通过open函数,这的确很像C语言中的fopen。通过open函数获取一个file object,然后调用read(),write()等方法对文件进行读写操作。 1.open 使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能 关闭文件。 file_object = open(thefile.txt) try: all_the_text = file_object.read( ) finally: file

  • python扫号脚本终极版 2012-10-19

    <脚本纯属研究只用,如果产生任何后果和作者无关> 测试通过:gmail,yahoo,163,qq,126,aol等 使用方式:python ./mail.py username.txt save.txt username.txt就是你要扫的文本,文本里面格式必须为如下: [email protected](空格)aiyawocao [email protected](空格)aiyoweiwocao server=”smtp服务器地址” 端口请自行更改 #!/usr/bin/env

  • 使用python中的matplotlib进行绘图分析数据 2012-10-31

    matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。 它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。 在Linux下比较著名的数据图工具还有gnuplot,这个是免费的,Python有一个包可以调用gnuplot,但是语法比较不习惯,而且画图质量不

  • Python参考手册 2013-02-24

    表达式 重要的内置函数 ------------------------------------------------------------------------------------------------- 函数 描述 ------------------------------------------------------------------------------------------------- abs(numbers) 返回一个数的绝对值 apply(func[,a

  • python 中文乱码解决方法 2013-03-24

    比如我从网上下载一些信息或写个电子邮件程序下载到本地,以记事本(txt) 形式写入并保存在本地计算机,为什么看到只是英文和乱码的?该怎样做呢? 答 乱码原因: 因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件。但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串当然是乱码了。 解决方法: 在控制台打印的地方用一个转码就ok了,打印的时候这么写: print myname.decode('utf-8').encode('gb

  • python批量修改指定目录文件名 2013-05-03

    这小例子只要是说明用python怎么批量修改指定目录的文件名: 记得要把脚本跟修改的文件放在同一个目录下 #encoding:utf-8 import os import sys files = os.listdir('D:\\1') #路径可以自己 for name in files: a = os.path.splitext(name) if a[1] == '.txt': #txt可以自己手动修改成你想改的文件名 newname = a[0]+'.py' #.py也是可以修改 print

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.065 (s). 10 q(s)