前言
前面写过一个关于简单去除多余空格、换行符的小抄:
Python: 如何去除字符串多余的空格、换行符。有时,掌握一些不经意间的小技巧能节省很多时间,对文档规范化和自定义样式化还是很有帮助的。文档的整理囊括许多方面的问题,比如关于它的描述包含逻辑描述和物理描述。逻辑描述是从自然语言的角度出发,以人类语言逻辑的方式加工生成,易于理解。物理描述,通常是指文档的存储格式或存储描述,字符以某种特定的方式编码保存在存储器硬件上。实际上,由于操作系统或软件等平台多元化的缘故,一种逻辑描述往往对应多种物理描述。正是这种 1:N 的关系,使得文档规范化趋向抽象复杂化。因此,需要一种居中协调的中间逻辑描述来协助文档规范。
明文文本
明文文本,或纯文本,一般来说,在文档编辑器中,表示和存储都是相同的。
内存变量
在程序中定义的字符串变量,也就是保存在内存中的字符串变量。字符串变量通过print(string)函数直观地打印显示在屏幕上。在字符串变量中,“所见即所得”——一般来说,逻辑描述和物理描述是一致的。即使出现软件平台所不理解的物理描述字符,也会把它显现出来。文档规范化也相对简单。
磁盘文本文件
磁盘文本文件(Plain Text File)的物理描述,可能由于操作系统或编辑软件的多元化,对于一种字符逻辑描述有多个不同的解释。比如,在Ubuntu 20.04的gedit文本编辑器中,视觉上看到的换行符 ‘\n’,可能是空白的一行(An empty row),也可能是 ‘^M’ 字符。这一点也不奇怪。编辑软件只是机械地认为从另一平台上复制的字符就是它所认为的那样,即使包含了所不理解的物理描述。对于这种情况,可以根据一种通用的标准,将物理描述转换为一种中间的逻辑描述,然后再对其加工整理成易于理解的目标逻辑描述。
import io
def test(text):
buffer = io.StringIO(text)
text = ''
line = buffer.readline()
last_line_empty = False
while line is not None and line != '':
if len(line) < 2