玖叶教程网

前端编程开发入门

Python|将几段文本适当处理后写成一个包含CSS和JS的网页文件

对于网络上的文本,有的换行分段不是很规范,如果想做较规范的处理,并写成自己定义的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;

1 预先写好网页的头部文件:head.html(可以包含CSS和JS代码)

2 预告写好网页的尾部文件:tail.html(可以包含JS代码)

3 需要处理的文本复制到一个文本文件:original.txt,届时放到网页的内容部分;

4 编写处理文本的Python代码

5 代码非常简单,只需要注意几个语法细节:

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的每段加<p></p>\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 = '<h4>' + lines.strip() + '</h4>\n\n'

............fNew.write(s)

........else:

............s = lines.replace('\n','')

............s = s.strip() # 会删除掉\n

............s = '<p>' + s + '</p>\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-

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言