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

原文格式如下:

第一章

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

我想要它变成这样子的:

第一章

一

沃格雷夫法官先生新近离任退休,现在正在头等车厢的吸烟室里,倚角而坐,一边喷着雪茄烟,一边兴致勃勃地读着《泰晤士报》上的政治新闻。

沃格雷夫放下报纸,眺望窗外。列车奔驰在西南沿海的萨默塞特原野儿他看了看表,还有两小时路程。

沃格雷夫法官先从口袋里掏出一封信。尽管笔迹认不真切,但通篇行文措辞却异常明确:“亲爱的劳伦斯……分别多年……务请光临印地安岛……景色迷人之至……离情别意,又何其多!……往日云烟……人天交融……向阳之乐……12点40分由帕庭顿车站出发……在橡树桥恭候大驾……具名是位女的,花体签名是:康斯坦斯卡尔明顿。

沃格雷夫法官先生苦苦思索着末一次见到康斯坦斯卡尔明顿夫人的具体日期,想必有七年,不,八年了吧!那时她正去意大利准备享向阳之乐,同大自然和田夫野老融为一体。后来,听说她又向前到了叙利亚,那里的阳光更盛,乐意更浓,更能同大自然和阿拉伯牧民融为一体。

他想起来了,康斯但斯卡尔明顿就是这种妇女,一个人买上一座小岛住下,那显得有多么神秘!沃格雷夫法官先生觉得自己推断得这样有理,不禁微微点起头来。就这样点呀点呀的……。

他睡着了……。

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

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

磕磕碰碰地写出来了:

 # coding=utf8

 def is_section(s):
return (s!='') and (s[0]=='第') and (s[-1]=='章') def is_hz_number(s):
r=(s!='')
for ch in s:
if ('一二三四五六七八九十百'.find(ch)==-1):
r=False
return r def main():
filename='nobody.txt'
output='output.txt'
fp=open(filename, 'r')
fp2=open(output, 'w')
output=''
line_add='' count=0
for line in fp:
line=line.strip('\n')
if (line==''):
last_ch=''
else:
last_ch=line[-1]
# print(last_ch) #获取最后一个字符。支持中文哦~
line_add=line_add+line
if (last_ch in ['。', '”', '?', '!', ':']) or is_section(line_add) or is_hz_number(line_add):
output=line_add
line_add=''
print(output)
fp2.write(output+'\n\n')
count=count+1
# if count>10:
# break
fp2.write(line_add) 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 m
ultibyte sequence

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

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

删掉就好了。

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

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

用python格式化小说txt的更多相关文章

  1. python爬虫小说代码,可用的

    python爬虫小说代码,可用的,以笔趣阁为例子,python3.6以上,可用 作者的QQ:342290433,汉唐自远工程师 import requests import refrom lxml i ...

  2. Python格式化字符串~转

    Python格式化字符串 在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作 ...

  3. Python格式化字符串和转义字符

    地址:http://blog.chinaunix.net/uid-20794157-id-3038417.html Python格式化字符串的替代符以及含义     符   号     说     明 ...

  4. python 格式化 json输出

    利用python格式化json 字符串输出. $ echo '{"json":"obj"}' | python -m json.tool 利用python -m ...

  5. Python爬虫——小说

    #encoding:utf8 import re import urllib2 url = 'http://www.23us.com/html/55/55304/' request = urllib2 ...

  6. python格式化输出【转】

    今天写代码时,需要统一化输出格式进行,一时想不起具体细节,用了最笨的方法,现在讲常见的方法进行一个总结. 一.格式化输出 1.整数的输出 直接使用'%d'代替可输入十进制数字: >>> ...

  7. (转)Python格式化字符 %s %d %f

    Python格式化字符 %s %d %f 原文:http://blog.csdn.net/huangfu77/article/details/54807835 格式 描述%% 百分号标记 #就是输出一 ...

  8. vim调用python格式化json数据

    vim调用python格式化json数据 November 30, 2013GNU/Linuxpython3, Vimopenwares python有个标准模块叫json,用于编码/解码,序列化/按 ...

  9. [20191106]善用column格式化输出.txt

    [20191106]善用column格式化输出.txt # man columnDESCRIPTION     The column utility formats its input into mu ...

随机推荐

  1. 22.java方法的定义

    java中的方法:就相当于c语言中的函数:sun在开发java的时候,为提高其代码的重复利用率,引入了方法. 什么是方法? 方法就是一段代码片段,这个片段可以完成特定的功能,并且可以重复利用. 从入口 ...

  2. wannafly test D

    题意: 给定n,m求满足: 1.a[i][j]互不相同,且有$1<=a[i][j]<=n*m$ 2.对于$a[i1][j1],a[i2][j2]$,如果有 $i1 \oplus j1 &g ...

  3. TypeScript完全解读(26课时)_7.ES6精讲 - 类Class基础

    ES6精讲 - 类Class基础 es5中创建构造函数和实例 原来在es5中的写法 定义好Point后,在原型对象上定义getPostion的方法 实例自身是没有这个方法的,我们调用的时候会去创建他的 ...

  4. sfc命令

    开始—>运行—>再输入“sfc /scannow”(不含引号),“sfc”是“系统文件检测”程序,它是一个在命令提示符下使用的实用程序,只有是管理员才能使用该程序,这个程序的作用就是检测系 ...

  5. POJ - 3414 Pots BFS(著名倒水问题升级版)

    Pots You are given two pots, having the volume of A and B liters respectively. The following operati ...

  6. LeetCode: 292 Nim Game(easy)

    题目: You are playing the following Nim Game with your friend: There is a heap of stones on the table, ...

  7. 打造个人IP: 开源项目网站构建框架

    前言 您是否正在寻找有关如何创建博客网站: 个人博客 或者 开源项目官网 : Dubbo, Vue.js的构建框架? 在这篇文章我将向您展示如何创建一个美观并且实用的开源博客/开源项目官网构建框架!近 ...

  8. 服务迁移之路 | Spring Cloud向Service Mesh转变

    一.导读 Spring Cloud基于Spring Boot开发,提供一套完整的微服务解决方案,具体包括服务注册与发现,配置中心,全链路监控,API网关,熔断器,远程调用框架,工具客户端等选项中立的开 ...

  9. HDU2489【状压枚举】

    题意: 给你n个点的图,然后让你在图里挑m个点,达到sumedge/sumnode最小 思路: 由于数据范围小,状压枚举符合m个点的状态,我是用vactor存了结点位置,也记录了结点的sum值,然后跑 ...

  10. shader实例(八)渲染路径RenderingPath

    Unity的摄像机上支持3种RenderingPath,分别是VertexLit,Forward和Dferred Lighting,而shader中的LightMode标签Vertex,Forward ...