对于网络上的文本,有的换行分段不是很规范,假如想做较规范的解决,并写成自己定义的CSS和JS的网页,能按下面思路解决:
1 预先写好网页的头部文件:head.html(能包含CSS和JS代码)
2 预报写好网页的尾部文件:tail.html(能包含JS代码)
3 需要解决的文本复制到一个文本文件:original.txt,到时放到网页的内容部分;
4 编写解决文本的Python代码
4.1 将head.html写入new.html;
4.2 将original.txt内容解决后写入new.html;
4.2 将tail.html内容解决后写入new.html;
2 预报写好网页的尾部文件:tail.html(能包含JS代码)
5.1 文本读入方法的区别
5.1.1 read([size]):读取整个文件做为一个字符串或者指定size大小的内容
从文件读取size数量或者一律字符,返回一个string类型。
read()的利端:
方便、简单;
一次性独读出文件放在一个大字符串中,速度最快;
read()的弊端:
文件过大的时候,占使用内存会过大,1GB的文件,需要占使用1GB的内存。
5.1.2 readline():
readline()逐行(段)读取文本,返回结果是一个字符串,当通过循环一律读完后,最后会读到一个空字符串,使用来当做循环解决结束的标记;
readline()的利端:
占使用内存小,逐行读取;
readline()的弊端:
因为是逐行读取,速度比较慢;
5.1.3 readlines():
readlines()一次性读取文本的所有内容,返回结果是一个list;
上面用with语句会自动关闭打开的文件;
这种方法读取的文本内容,每行(段)文本末尾都会带一个'\n'换行符 (能用L.rstrip('\n')去掉换行符)
readlines()的利端:
一次性读取文本内容,速度比较快;
readlines()的弊端:
随着文本的增大,占使用内存会越来越多,同样的,1GB的文件,需要1GB的内存;
5.1.4 直接for循环文件对象
调使用read()会一次性读取文件的一律内容,文件一律内容做为一个字符串返回。假如文件太大,内存就爆了,所以,要保险起见,能反复调使用read(size)方法,每次最多读取size个字节的内容。
调使用readlines()一次读取所有内容并按行返回一个list。
调使用readline()能每次读取一行内容;
因而,要根据需要决定怎样调使用。假如文件很小,read()一次性读取最方便;假如不可以确定文件大小,反复调使用read(size)比较保险;调使用readlines()最方便。
5.2 python中'\r'、'\n'及'、'\r\n'
假如文本文件是使用atom编辑器写的,发现换行符是'\r'。这样一来去逐行读取数据就失效了,由于使用open函数去打开该文件readline()时默认用的换行符是'\n'。
但是,当这个txt文件是使用pycharm编辑器写的话,其换行符就是'\n'了。一切正常。
在打字机时代就有了这几个符号的设计,其实'\r'的本意是回到行首,'\n'的本意是换行。所以回车相当于做的是'\r\n'或者者'\n\r'。到了计算机时代沿使用了这个符号设计,后来预计换行并回行首需要一起解决,所以出现了'\r'、'\n'、'\r\n'都有可可以表示换行并回行首。(Windows是'\r\n',Linux是'\n')
假如需要明文内容,请使用'rU'来读取(强烈推荐),即U通使用换行模式(Universal new line mode)。该模式会把所有的换行符(\r \n \r\n)替换为\n。只支持读入,但是也足够了。这是Python 提供给我们的最好的选择,没有之一。
open函数加上参数'rU'后,读取结果跟txt文件体现就一致了。
另外,文件在用write()方法写入时是不提供\n,由使用户根据需要自行选择增加,这样在分行时更加灵活。
5.3 字符的strip()方法,全删除掉\n
strip()方法使用于删除字符串首尾的空格,也能使用来删除首尾的指定指定串,格式为strip([str])。strip()的功可以能分解为lstrip()和rstrip()。
5.4 open()方法打开文件时的编码问题
假如涉及编码的报错,需要进行编码解决,如:
f = open('init.txt','rU',encoding='UTF-8')
附 Python代码:
import sys
import os
import re
arg1 = '' # 脚本没有参数:不合并段落;否则使用空行分段,不是空行的合并
if len(sys.argv) > 1 :
....arg1 = sys.argv[1]
# 将init.txt的文本适当解决,写到temp.txt文件中
f = open('init.txt','rU',encoding='UTF-8')
fTemp = open('temp.txt','w',encoding="UTF-8")
s = f.read() # 整个文本文件作为一个字符串返回
s = s.replace(' ','') # 解决全角空格
s= re.sub(r'\(淫色淫色\S+\)', '', s)
#s = s.replace(' ' , '\n\n')
#解决文本中的空格,只需含有“英文+空格+英文”就不解决
pattern =re.compile(u"[a-zA-Z]+\s+[a-zA-Z]+")
entxt = re.findall(pattern,s)
if (not entxt):
'''
....s = s.replace('.' , '。')
....s = s.replace(',' , ',')
....s = s.replace('!' , '!')
....s = s.replace('?' , '?')
'''
....s = s.replace(' ' , '') # 解决半角空格(全中文能用)
if (arg1 == ''):
....for i in range(4):
........s = s.replace('\n\n','\n') # 将多余的空行解决掉
else:
....# 解决使用空行分段的文本(不是空格的段落合并)
....s = s.replace('\n\n','a1b2c3z0')# 使用'a1b2c3z0'作段落标记
....s = s.replace('\n','')
....s = s.replace('a1b2c3z0','\n')
fTemp.write(s)
f.close()
fTemp.close()
# 'w'覆盖写website.html,'a'为追加写
fNew = open('website.html','w',encoding="UTF-8")
# 将head.html文件写到new.txt文件中
with open('head.html','rU',encoding="UTF-8") as head:
....line = head.readline() # 返回单行(段落)string
....while line: # 一律读完后,会返回一个空字符串
........fNew.write(line)
........line = head.readline() # 第n次执行则返回第n行
....#fNew.write(head.read())
# 将temp.txt的每段加
\n\n,写到website.html文件中with open('temp.txt','rU',encoding="UTF-8") as fTemp2:
....countLines = countChars = 0
....for lines in fTemp2.readlines(): # 返回一个列表list,元素为行
........countLines += 1
........countChars += len(lines)
........if countLines == 1:
............s = '
' + lines.strip() + '
\n\n'............fNew.write(s)
........else:
............s = lines.replace('\n','')
............s = s.strip() # 会删除掉\n
............s = '
' + s + '
\n\n'............fNew.write(s)
....fNew.write("\n\n本页共")
....fNew.write(str(countLines))
....fNew.write("段,")
....fNew.write(str(countChars))
....fNew.write("个字符。")
# 将head.html文件写到new.txt文件中
ffooter = open('footer.html','r',encoding="UTF-8")
fNew.write(ffooter.read())
fNew.close()
ffooter.close()
with open('temp.txt','rU',encoding="UTF-8") as fTemp3: #重命名website.html
....nfn = fTemp3.readline()
nfn = nfn.strip()
nfn += '.html'
if os.path.exists(nfn):
....os.remove(nfn)
os.rename('website.html',nfn)
print(countLines,"lines and",countChars,"chars.")
-End-