Python高效编程实战---3、字符串处理技巧

一、如何拆分含有多种分隔符的字符串

# 将字符串s分割成列表
s = 'abc,eee,weq,e    eiu ew weoi|qwei\qe'

方案一:用string的split()方法
append和extend都仅只可以接收一个参数,append 任意,甚至是tuple,extend 只能是一个列表
map()它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

def split_str(split_desc, str):
    str_list = [str]
    for d in split_desc:
        t=[]
        map(lambda x: t.extend(x.split(d)), str_list)  # 将x.split(d)生成的[]中每个元素添加到和t[]中
        str_list=t
    return [x for x in str_list if x]

print split_str([',', ' ', '|', '\\', '\\t'],s)

方法二 :调用正则表达式的re.split方法

import re
print re.split(r'[, |\\t]+',s)  

二、如何判断字符串a是否以字符串b开头或结尾

import os, stat
dir_list = os.listdir('.')   # 获取当前目录下的所有文件及文件夹名
print dir_list
print [x for x in dir_list if x.endswith(('py', 'txt'))]  # endswith()判断字符串是否以元组内任一一个结尾

print oct(os.stat('django.txt').st_mode)  # oct()将数字转化为8进制,stat()为状态查询
os.chmod('django.txt', os.stat('django.txt').st_mode | stat.S_IXUSR)

三、调整字符串的文本格式

import re
# 利用正则表达式的捕获组,捕获每部分的内容,在替换字符串中调整各个捕获组的顺序
str = '2017-10-05 this is test'
# 方法一
print re.sub('(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', str)

# 方法二
print re.sub('(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})', r'\g<month>/\g<day>/\g<year>', str)  

四、将多个小字符串拼接成一个大字符串

pl=['litaifa','ljh','jsy','family']
print ';'.join(pl)  # 以;为分隔,将列表pl合并成一个长字符串
print ''.join(pl)   # 无分隔,将列表pl合并成一个长字符串

pl=['litaifa','ljh','jsy','family',45] # 列表中有非字符串
print ';'.join([str(x) for x in pl])  # 列表解析,开销比较大
print ';'.join(str(x) for x in pl)    # 参数用生成器对象,开销比较小,推荐方法

五、对字符串进行左中右对齐

str = 'abc'
print str.ljust(20)  # 左对齐
print str.center(20, '-')  # 右对齐,不足部分用'-'填充
print str.rjust(20)  # 居中对齐

print format(str, '<20')  # 左对齐
print format(str, '>20')  # 右对齐
print format(str, '^20')  # 居中对齐

# 实例,将冒号对齐
d = {
    'litaifa': 45,
    'jinshuyan': 40,
    'ljh': 10
}
w = max(map(len, d.keys()))  # 用map对d.keys()列表中的每个元素求长,将长度作为新列表的值返回,max()求列表的最大值
for k in d:
    print k.ljust(w), ":", d[k]

六、去掉字符串中不需要的字符

  1. 字符串strip(),lstrip(),rstrip()方法去掉字符串两端字符,如
  2. 删除单个固定位置的字符,可以使用切片+拼接的方式
  3. 字符串replace()方法或正则表达式re.sub()删除任意位置字符
  4. 字符串translate()方法,可以同时删除多种不同字符
import re, string

str = '++a,b.c|tddef--'
print str.strip('+-')  # 参数为所有需要删除的字符组成的字符串
print str[:3] + str[4:]  # 删除','
print str.replace('+', '')  # 一次只能删除一种串

print re.sub(r'[+\-,.|]|(def)', r'', str)  # 一次可以删除多种串
m = string.maketrans('def', 'xyz')  # 生成一个转换表,将d转换为x,e转换为y,f转换为z
print str.translate(m)  # 将字符串接照m转换表进行转换
print str.translate(None, '+-,.|')  # 不进行转换,而是按照第二个参数,将字符串中包含的每一个字符删除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章