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, '+-,.|')  # 不進行轉換,而是按照第二個參數,將字符串中包含的每一個字符刪除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章