用python格式化小說txt

下載了《無人生還》的txt版。傳到手機,發現閱讀器識別得不夠好。python

原文格式以下:小程序

第一章
一
沃格雷夫法官先生新近離任退休,如今正在頭等車箱的吸菸室裏,倚角而坐,一

邊噴着雪茄煙,一邊興致勃勃地讀着《泰晤士報》上的政治新聞。
沃格雷夫放下報紙,眺望窗外。列車奔馳在西南沿海的薩默塞特原野兒他看了看

表,還有兩小時路程。
沃格雷夫法官先從口袋裏掏出一封信。儘管筆跡認不真切,但通篇行文措辭卻異

常明確:「親愛的勞倫斯……分別多年……務請光臨印地安島……景色迷人之至

……離情別意,又何其多!……往日雲煙……人天交融……向陽之樂……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=False
11     return r
12 
13 def main():
14     filename='nobody.txt'
15     output='output.txt'
16     fp=open(filename, 'r')
17     fp2=open(output, 'w')
18     output=''
19     line_add=''
20 
21     count=0
22     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+line
30         if (last_ch in ['', '', '', '', '']) or is_section(line_add) or is_hz_number(line_add):
31             output=line_add
32             line_add=''
33             print(output)
34             fp2.write(output+'\n\n')
35             count=count+1
36         # if count>10:
37         #     break
38     fp2.write(line_add)
39 
40 main()

中間遇到這樣的錯誤:spa

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文件排除,終於找到問題所在,原來是裏面混入了一些亂碼,象這樣:code

。安全,保險!塹模笤謐約杭依鏌謊鵲保*blog

刪掉就行了。ip

另:有個地方不大明白:我在py文件頭註明了 utf8 編碼格式,在程序中使用了 readline、line[-1]截取、以及其它字符串函數,竟然對GBK的文本文件處理得很好,估計這是python3的特性之一吧,我誤打誤撞地成功了。

(注:本文毫無技術含量,僅作爲練手的記錄。)

相關文章
相關標籤/搜索