Python文本處理(1)

每次處理一個字符python

解決方法:正則表達式

建立列表 算法

thestring='abcdefg'
thelist=list(thestring)
print thelist
 
結果
['a', 'b', 'c', 'd', 'e', 'f', 'g']

使用for語句循環遍歷 api

thestring='abcdefg'
for c in thestring:
    print c

使用列表推導式 (注意這裏使用ord表示將字符轉爲字符值,例如a轉爲97)函數

thestring='abcdefg'
results=map(ord,thestring)
print results

討論:測試

 

想要得到字符串中全部字符的集合,調用sets.Set ui

import sets
magic_chars=sets.Set('abracadabra')
poppins_chars=sets.Set('supercalifragilisticexpialidocious')
print ''.join(magic_chars & poppins_chars)

 

 

字符和字符值之間的轉換spa

解決方法:code

使用函數ord和chr 對象

print ord('a')
print chr(97)

 


測試一個對象是否爲一個類字符串(對象是否有字符串的行爲模式)

解決方法:

使用isinstance和basestring檢查 

def isAString(anobj):
    return isinstance(anobj,basestring)

anobj='abcde'
print isAString(anobj)
otherobj=list(anobj)
print isAString(otherobj)

 

 

字符串對齊(左對齊、居中對齊、右對齊)

解決方法:

使用string對象的ljust、rjust和center,參數指明寬度 

print '|','hey'.ljust(20),'|','hey'.rjust(20),'|','hey'.center(20),'|'

討論:

 

能夠不打印空格,而以其餘字符打印,只需增長第二個參數 

print 'hey'.center(20,'+')

 

 

去除字符串兩端的空格

解決方法:

使用string對象的lstrip、rstrip和strip 

x='     hey     '
print '|',x.lstrip(),'|',x.rstrip(),'|',x.strip(),'|'

 

 

合併字符串

解決方法;

使用字符串操做符join 

x=['I','Love','Python']
largestring=' '.join(x)
print largestring

一樣,使用最基本的%也能夠達到這樣的效果 

x=('I','Love','Python')
largestring='%s %s %s !' % x
print largestring

討論:

 

固然,使用字符串的+操做彷佛可以得到更加簡潔的操做,但別忘了,在python中,字符串是沒法改變的,任何的改動都將會建立當前字符串的一個副本,當有大量的小段的字符串相加時,所建立的副本正比於其平方,此時使用join方式就是一個必要的選擇了。當須要在建立的新的字符串中添加額外的內容時,使用%較爲方便。


將字符串逐字符或逐詞反轉

解決方法:

使用步長爲-1的切片方法 

astring='I Love Python'
revchars=astring[::-1]
print revchars

結果 
nohtyP evoL I 

按照單詞進行反轉,則須要建立一個單詞的列表,將列表反轉,最後使用join合併 

astring='I Love Python'
revwords=' '.join(astring.split()[::-1])
print revwords

結果
Python Love I

想要逐詞反轉但又不想改變原先的空格,使用正則表達式分割原字符串 

import re
astring='I   Love   Python'
revwords=' '.join(re.split(r'(\s+)',astring)[::-1])
print revwords

結果
Python     Love     I

 

 

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

解決方法:

最簡單的方法以下 

def containAny(seq,aset):
    for c in seq:
        if c in aset:
            return  True
        return False
    
seq='abc'
aset='hjkyuia'
print containAny(seq,aset)

也可使用基於標準庫itertools模塊的方法,不過本質上使用的相同的方法 

import itertools
def containAny(seq,aset):
    for item in itertools.ifilter(aset.__contains__,seq):
        return True
    return False

seq='abc'
aset='ghjka'
print containAny(seq,aset)

 


檢查一個字符串是文本仍是二進制

解決方法:

尚未精確的算法,不過可使用一些啓發式方法,若是字符串中包含了空值或者有超過30%的高位被置爲1或是奇怪的控制碼,就認爲這段數據是二進制數據


控制大小寫(大小寫轉換)

解決方法:

使用upper和lower方法比較簡單,但通常使用更多的是capitalize和title方法 

print 'one tWo thrEe'.capitalize()
print 'one tWo thrEe'.title()

結果
One two three
One Two Three
相關文章
相關標籤/搜索