Python Cookbook 第一章部分

1.1每次处理一个字节

任务:用每次处理一个字节的方法处理字符串。

方法一:首先用list函数将一个字符串转化为子项是字符串(一个)字符的列表;在用for语句对该字符串进行循环遍历。

方法二:尝试用列表推导式。

方法三:使用内建的map函数。

result=map(do_something,thelist)

讨论:如果想获得该字符串的所有字符的集合,可以使用set函数将字符串转换为集合(集合中不会存在重复的元素)。可以用&取两个集合之间的交集。

1.2字符和字符值之间的转换

任务:将一个字符转化为相应的ASCII或者Unicode码,或者反其道而行之。

若想将一个字符串如‘ciao’转化为一个包含各自字符的值的列表,可以使用ord和map函数。3.0记得用list转换map object。

1.3测试一个对象是否是类字符串

任务:有时当你在写一个函数或者方法的时候,经常需要测试传入的参数是否是一个字符串。

方法一:利用isinstance和basestring来检测某个对象是否是字符串或者是Unicode对象。basestring在python3.0中被取消了。

方法二:使用try-except-else语句,检验参数是否和字符串和Unicode一样可以anobj+' '。'+'两边的类型必须一致。

这种检查类型在python中称为鸭子判断法(如果它走路像鸭子,叫声也像鸭子,那么我们就认为它是鸭子了)

更完整的try:anobj.lower()+anobj+' '

1.4字符串对齐

任务:实现字符串左对齐、居中对齐或者右对齐。

方法一:ljust、rjust和center函数可以解决这个问题,参数为生成的字符串的宽度。

讨论:center函数的第二个参数可以指定填充符号。

1.5去除字符串两端的空格

方法:可以使用rstrip、lstrip和strip函数解决问题。

讨论:如何去除空格外其他符号。

1.6合并字符串

任务:有一些小的字符串,想把这些字符串合并成一个大的字符串。

方法:可以使用字符串操作符join。

讨论:也可以使用+号将字符串拼接起来。

或者:

更漂亮的写法:

1.7将字符串逐字符或逐词反转

任务:'akkashi'——'ihsakka'

方法一:使用分切[::-1]

方法二:将字符串转换为单词列表,反转列表,在将单词列表转换为字符串。

“一行解决”:

1.8检查字符串中是否包含某字符集合的字符

任务:检查字符串中是否出现了某字符集合中的字符。

方法一:

方法二:使用set函数和intersection判断set(aset)与seq之间是否有交集,如果有则返回True(即使只有一个也返回。)

方法三:使用set函数和difference方法判断。a.difference(b):返回a中所有不属于b的元素。

方法四:maketrans

1.9简化字符串translate方法的使用

任务:用字符串的translate方法来进行快速编码,但却发现很难记住这个方法和string.maketrans函数的应用细节,所以需要对他们做个简单的封装。

首先我们来看它们的基础用法:

一个返回闭包的工程函数:

现如今,若我想要一个函数,使其只保留给定集合中的字符,我就可以简单地建构并使用这个函数:
>>> digits_only = translator(keep=string.digits)
>>> digits_only('Chris Perkins : 224-7992')
'2247992'
若要从字符串中移除某个字符集中的字符,也同样简单:
>>> no_digits = translator(delete=string.digits)
>>> no_digits('Chris Perkins : 224-7992')
'Chris Perkins : -'
若要用单一个字符替换一个字符集合,可以这样做:
>>> digits_to_hash = translator(from=string.digits, to='#')
>>> digits_to_hash('Chris Perkins : 224-7992')
'Chris Perkins : ###-####'

1.10过滤字符串中不属于指定集合的字符

任务:给定一个需要保存的字符的集合,构建一个过滤函数,并可将其应用于任何字符串s,函数返回一个s的拷贝,该拷贝只包含指定字符集合的元素。

translate应用于一个字符串并返回该字符串的一个拷贝,这个拷贝中的所有字符都将按照传入的第一参数指定的替换方式来替换,而且第二参数指定的所有字符串都将被删除。

讨论:
给定字符串s,将s的字符串以一种规整的字符串形式返回:按照字母顺序排列且没有重复。

1.11检查一个字符串是文本还是二进制

方法一:采用perl的判断方法:如果字符串中包含空值或者其中包含有超过30%的字符的高位被置1(意味该字符的码大于126)或是奇怪的控制码,我们就会认为该段数据是二进制。

1.12控制大小写

capitalize()、title()、upper()、lower()

讨论:我们来定义Iscapitalize()函数。Iscaptitalize()是将字符串的首个字符大写;如果字符串为空或者非字符就返回False。

再加上1.8定义的Iscontain()即可。

 

猜你喜欢

转载自blog.csdn.net/weixin_44649331/article/details/87944680