Python 字符串处理函数(三)
文章目录
- Python 字符串处理函数(三)
- 九、字符过滤和清理
- 十、字符串对齐处理
- (1)函数ljust()
- (2)函数rjust()
- (3)函数center()
- 十一、字符串连接和合并
本篇在Python 字符串处理函数(一)和(二)的基础上,继续讲解 Python字符串处理函数的知识。
九、字符过滤和清理
在Python程序中,有时候想以其某种方式清理过滤掉文本中的某类字符,例如用户注册表单中的非法字符。在现实应用中。文本过滤和清理操作涉及文本解析和数据处理等领域,在实现时可以从以下三个方面着手:
(1)在一些简单的应用中,可以用基本的字符串函数(例如 str.upper()和 str.lower())将文本转换为标准形式。
(2)在实现简单的替换操作时,可以通过内置函数str.replace()或re.sub()来实现,将核心操作用在删除或修改特定的字符序列上。
(3)可以利用unicodedata.normalize()函数来规范化文本,式将其清理掉。
如果想删除整个范围内的字符,可以使用内置函数str.translate()实现,具语法格式如下所示:
str.translate(table[, deletechars]);
bytes.translate (table[, delete])
bytearray.translate (table[, delete])
●参数table: 翻译表,翻译表是通过maketrans()方法转换而来;
●参数deletechars: 字符串中要过滤的字符列表。
函数translate()的功能是根据参数table给出的表(包含256个字符)转换字符串的字符,将要被过滤掉的字符放到数deletechars中。返回值是翻译后的字符串,如果给出了delete参数,则删除原来在bytes中的属于delete的字符,剩下的字符要按照table中给出的映射来进行映射。请看下面的实例文件,功能是使用函数translate()删除空格和 Unicode组合字符。
s = 'P\xfdt\u0125\xf6\×f1\×0cis\tPpppp\r\n'
print (s)
#删除空格
chuli = {
ord('\t') : ' ',
ord('\f') : ' ',
ord('\r') : None
}
a = s.translate(chuli)
print ('whitespace chuliped:', a)
#删除所有的Unicode组合字符标记
import unicodedata
import sys
cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode)
if unicodedata.combining (chr (c)))
b = unicodedata.normalize('NFD', a)
c = b.translate (cmb_chrs)
print ('accents removed: ', c)
#使用I/0解码和编码函数
d = b.encode('ascii','ignore').decode('ascii')
print('accents removed Via I/O:', d)
第一行打印输出混乱字符串S ,第四行建立一个小型的转换表chuli,然后使用函数translate() 删除空格。类似“\t”和“\f”
之类的空格字符已经被重新映射成个单独的空格,回车符“\r”已经被完全被删除掉。
第12~18行删除掉所有的Unicode组合字符,首先使用函数dict.fromkeys()构建一个将每个Unicode组合字符都映射为None的字典。原始的输入信息会通过unicodedata.normalize()函数转换为分离的形式,然后再通过函数translate()删除所有的重复符号。同样道理,读者朋友们也可以使用相似的方法来删除其他类型的字符,例如控制字符。
倒数两行初步清理文本,然后利用函数encode()和decode()修改或清理文本。函数normalize()先对原始的文本进行操作,后续的ASCII编码/解码只是简单地一次性丢弃所有不需要的字符。
执行结果如下:
十、字符串对齐处理
在pyhon程序中,有些时候根据不同需要,字符申要做些左对齐、 居中右对齐操作,可以使用如下所示的三个内置函数实现字符串的对齐处理,这三个函数被保存在内置模块string中。
(1)函数ljust()
函数just()的功能是返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度,则返回原字符申,其语法格式如下所示:
str.ljust (width[, fillchar])
●参数width: 指定字符串长度;
●参数flchar; 填充字符,默认为空格。
(2)函数rjust()
函数rjust()的功能是返回一个原字符串右对齐,并使用空格填充至长度widh的新字符串。如果指定的长度小于字符串的长度,则返回原字符串。其语法格式如下所示:
str.rjust (width[, fillchar])
●参数widh: 填充指定字符后中字符串的总长度。
●参数fillchar: 填充的字符,默认为空格。
(3)函数center()
函数centert()的功能是返回一个指定的宽度 width居中的字符串,flchar为填充的字符,默认值为空格。其语法格式如下所示:
str.center (width[, fillcharl)
●参数width: 字符串的总宽度。
●参数fllchar: 填充字符。
例如在下面的实例文件diqup中,滴示了使用上述三个函数实现字符串对齐处理的过程:
str = "Toppr example....wow!!!"
print (str.ljust(50,'*'))
strl = "this is string exampl....wow!!!"
print (strl.rjust(50,'*'))
str3 = "[www.toppr.net]"
print ("str3.center(40,'*') : ", str.center(40,'*'))
执行后会输出:
十一、字符串连接和合并
在Python程序中,通常需要将许多个小的字符串合并成一个大的字符串。其中最为简单的方法是使用内置模块string中的join()函数,此函数的功能是将序列中的元素以指定的字符连接生成一个新的字符串,具体语法格式如下所示:
str. join (sequence)
参数sequence表示要连接的元素序列。例如在下面的实例文件lanjepy中,演示了使用函数join()和其他方式实现字符串连接功能的过程:
s1 = "_"
s2 = ""
seq = ("t", "o", "p", "p", "r") #字符串序列
print (s1.join( seq ))
print (s2.join( seq ))
parts = ['Is','Topper','Not','Topr?']
print(' '.join(parts))
print(','.join(parts))
print(''.join(parts))
a = 'Is Toppr'
b = 'Not Topr?'
print(a + ' ' + b)
print('{} {}'.format (a,b))
print(a + ' ' + b)
a = 'Is Toppr'' ' 'Not Topr?'
print (a)
前9行使用函数join()实现字符串连接,乍看上去其语法可能显得有些怪异,但是join()函数操作其实是字符串对象的一个方法。因为想要合并在一起的对象可能来自于各种不同的数据序列,例如可能是列表、元组、字典、文件、集合或生成器,如果每次单独在每一种序列对象中实现一个join()函数,就会显得十分多余。所以好的做法是只需要指定想要的分隔字符串,然后在字符串对象上使用join()函数将文本片段连接在一起即可。
第10~12行使用加号操作符“+”实现字符串连接。
第13~14行为了实现更加复杂的字符串格式化操作,加号操作符“+”可以作为format()函数的替代者。
最后两行如果想在源代码中将字符串字面值合并在一起,可以简单地将它们排列在一起,在中间无须使用加号操作符“+”。
执行后输出:
读者们需要注意,使用加号“+”连接符做大量的字符串连接是非常低效的,这是因为会产生内存拷贝和垃圾收集。例如可能会写出如下所示的字符串连接代码:
s = ''
for P in parts;
s+= P
上述代码的做法比使用join()函数要慢很多,这是因为每个“+”操作都会创建一个新的字符串对象。最好的做法是先收集所有要连接的部分,然后再次将它们连接起来。