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) ) # 一次可以删除多种串
print( re.sub(r'[+\-,.|]|def', r'', str) ) # 一次可以删除多种串
m = str.maketrans('def', 'xyz')  # 生成一个转换表,将d转换为x,e转换为y,f转换为z
print (str.translate(m))  # 将字符串接照m转换表进行转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值