首页 > 代码库 > 用python格式化小说txt

用python格式化小说txt

下载了《无人生还》的txt版。传到手机,发现阅读器识别得不够好。

原文格式如下:

第一章一沃格雷夫法官先生新近离任退休,现在正在头等车厢的吸烟室里,倚角而坐,一边喷着雪茄烟,一边兴致勃勃地读着《泰晤士报》上的政治新闻。沃格雷夫放下报纸,眺望窗外。列车奔驰在西南沿海的萨默塞特原野儿他看了看表,还有两小时路程。沃格雷夫法官先从口袋里掏出一封信。尽管笔迹认不真切,但通篇行文措辞却异常明确:“亲爱的劳伦斯……分别多年……务请光临印地安岛……景色迷人之至……离情别意,又何其多!……往日云烟……人天交融……向阳之乐……12点40分由帕庭顿车站出发……在橡树桥恭候大驾……具名是位女的,花体签名是:康斯坦斯卡尔明顿。沃格雷夫法官先生苦苦思索着末一次见到康斯坦斯卡尔明顿夫人的具体日期,想必有七年,不,八年了吧!那时她正去意大利准备享向阳之乐,同大自然和田夫野老融为一体。后来,听说她又向前到了叙利亚,那里的阳光更盛,乐意更浓,更能同大自然和阿拉伯牧民融为一体。他想起来了,康斯但斯卡尔明顿就是这种妇女,一个人买上一座小岛住下,那显得有多么神秘!沃格雷夫法官先生觉得自己推断得这样有理,不禁微微点起头来。就这样点呀点呀的……。他睡着了……。

 

我想要它变成这样子的:

第一章一沃格雷夫法官先生新近离任退休,现在正在头等车厢的吸烟室里,倚角而坐,一边喷着雪茄烟,一边兴致勃勃地读着《泰晤士报》上的政治新闻。沃格雷夫放下报纸,眺望窗外。列车奔驰在西南沿海的萨默塞特原野儿他看了看表,还有两小时路程。沃格雷夫法官先从口袋里掏出一封信。尽管笔迹认不真切,但通篇行文措辞却异常明确:“亲爱的劳伦斯……分别多年……务请光临印地安岛……景色迷人之至……离情别意,又何其多!……往日云烟……人天交融……向阳之乐……12点40分由帕庭顿车站出发……在橡树桥恭候大驾……具名是位女的,花体签名是:康斯坦斯卡尔明顿。沃格雷夫法官先生苦苦思索着末一次见到康斯坦斯卡尔明顿夫人的具体日期,想必有七年,不,八年了吧!那时她正去意大利准备享向阳之乐,同大自然和田夫野老融为一体。后来,听说她又向前到了叙利亚,那里的阳光更盛,乐意更浓,更能同大自然和阿拉伯牧民融为一体。他想起来了,康斯但斯卡尔明顿就是这种妇女,一个人买上一座小岛住下,那显得有多么神秘!沃格雷夫法官先生觉得自己推断得这样有理,不禁微微点起头来。就这样点呀点呀的……。他睡着了……。

 

貌似编辑器做不到这么高级的替换,我要写个小程序了。那就python吧。

python的东西几乎全都忘光了。helloworld、数字转字符串、字符串截取、串内查找、字符串的遍历、文件读写、文件遍历……等等,全都要从网上查找用法。。。

磕磕碰碰地写出来了:

 1 # coding=utf8 2  3 def is_section(s): 4     return (s!=‘‘) and (s[0]==) and (s[-1]==) 5  6 def is_hz_number(s): 7     r=(s!=‘‘) 8     for ch in s: 9         if (一二三四五六七八九十百.find(ch)==-1):10             r=False11     return r12 13 def main():14     filename=nobody.txt15     output=output.txt16     fp=open(filename, r)17     fp2=open(output, w)18     output=‘‘19     line_add=‘‘20 21     count=022     for line in fp:23         line=line.strip(\n)  24         if (line==‘‘):25             last_ch=‘‘26         else:27             last_ch=line[-1]28         # print(last_ch) #获取最后一个字符。支持中文哦~29         line_add=line_add+line30         if (last_ch in [, , , , ]) or is_section(line_add) or is_hz_number(line_add):31             output=line_add32             line_add=‘‘33             print(output)34             fp2.write(output+\n\n)35             count=count+136         # if count>10:37         #     break38     fp2.write(line_add)39 40 main()

中间遇到这样的错误:

Traceback (most recent call last):  File "a.py", line 41, in <module>    main()  File "a.py", line 23, in main    for line in fp:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaa in position 14: illegal multibyte sequence

苦思不得,只好一行行将源TXT文件排除,终于找到问题所在,原来是里面混入了一些乱码,象这样:

。安全,保险!堑模笤谧约杭依镆谎鹊保*

删掉就好了。

另:有个地方不大明白:我在py文件头注明了 utf8 编码格式,在程序中使用了 readline、line[-1]截取、以及其它字符串函数,居然对GBK的文本文件处理得很好,估计这是python3的特性之一吧,我误打误撞地成功了。

(注:本文毫无技术含量,仅做为练手的记录。)

用python格式化小说txt