咱們要把某字符串依據分割符號拆分不一樣的字段,該字符串包含多種不一樣的分隔符,例如: s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'
其中<,>,<;>,<|>,<\t>
都是分割符號,如何處理?java
方法1:連續使用str.split()
方法,每次處理一種分割符號python
方法2: 使用正則表達式的re.split()
方法,推薦.正則表達式
s='ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'
s.split('|,;')
s.split(';')
[ss.split('|') for ss in s.split(';')]
list(map(lambda ss:ss.split('|'),s.split(';')))
t=[]
t.extend([1,2,3])
t.extend([4,5,6])
map(t.extend())
[ss.split('|') for ss in s.split(';')]
sum([ss.split('|') for ss in s.split(';')],[])
def my_split(s,seps):
res=[s]
for sep in seps:
t=[]
list(map(lambda ss: t.extend(ss.split(sep)),res))
res=t
return res
my_split(s,',;|\t')
from functools import reduce
reduce(lambda l, sep:sum(map(lambda ss:ss.split(sep),1),[]),',;|\t',[s]
my_splits== lambda s,seps:reduce(lambda l, sep:sum(map(lambda ss:ss.split(sep),1),[]),seps,[s]
複製代碼
如何判斷字符串a
是否以字符串b
開頭或結尾?bash
某文件目錄下有一系列文件:服務器
quicksort.c
graph.p
heap.java
install.sh
stack.cpp
複製代碼
編寫程序給其中全部.sh
文件和.py
文件加上用戶可執行權限.網絡
使用str.startswith()
和str.endswith()
方法(注意:多個匹配時參數使用元組)ui
fn='aaa.py'
fn.endswith('.py')
fn.endswith('.sh','.py')
import os
os.listdir('.')
s=os.stat('b.py')
s.st_mode|0o100
oct(s.st_mode|0o100)
od.chmod('b.py',s.st_mode |0o100)
import stat
stat.S_IXUSR
for fn in os.listdir():
if fn.endswith('.py','.sh')
fs=os.stat(fn)
os.chmod(fn,fs.st_mode | stat.S_IXUSR)
複製代碼
如何調整字符串中文本的格式?spa
某軟件的logo
文件,其中的日期格式爲'yyyy-mm-dd'
咱們想把其中日期改成美國日期的格式'mm/dd/yyyy'.
2019-07-23'=>'07/23/2019'
,如何處理?設計
使用正則表達式re.sub()
方法作字符串替換,利用正則表達式的捕獲組,捕獲每部分的內容,在替換字符串中調整各個捕獲組的順序.code
ls /var/log
cat/var/log/dpkg.log.1
f=open('/var/log/dpkg.log.1')
log=f.read()
import re
re.sub(p,r,s)
print(re.sub(r'(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1',log))
print(re.sub(r'(?P<d>\d{4})-(?P<m>\d{2})-(?P<y>\d{2})',r'\g<m>/\g<y>',log))
複製代碼
如何將一個小字符串拼接成一個大字符串?
在設計網絡程序時,咱們自定義了一個基於UDP
的網絡協議,按照固定次序向服務器傳遞一系列參數:
hwdetect: "<0112>"
gxDepthBits: "<32>"
gxResolution: "<1024*768>"
gcRefresh: "<60>"" fullAlpha: "<1>" lodDist: "<100>" DistCall: "<500>" 複製代碼
在程序中咱們將各個參數按次序收集到列表中:
["<0112>","<32>","<1024>","<60>","<1>,"<100.00>","<500.00>"]
最終咱們要把各個參數拼接成一個數據進行報送.
"<0112><32><1024><60><1><100><500>"
方法一:迭代列表,連續使用"+"
操做依次拼接每個字符串.
方法二:使用str.join()
方法,更加快速的拼接列表中全部字符串.
l=["<0112>"","<32>","<1024>","<60>","<1>,"<100.00>","<500.00>"]
s=''
for x in l:
s+=x
s.join(iterable)->str
timeit ''.join(l)
timeit reduce(str.__add__,1)
複製代碼
某個字典存儲了一系列屬性值: {
"lodDist":100.00,
"SmallCull":0.04,
"DistCull":500.00,
"trilinear":40,
"farclip":477,
複製代碼
} 在程序中,咱們想以工整數的格式將其內容輸出,如何處理?
lodDist:100.00,
SmallCull:0.04,
DistCull:500.00,
trilinear:40,
farclip:477,
複製代碼
方法一:使用字符串的str.ljust(),str.rjust(),str.center()
進行左右中對齊》
方法二:使用format
方法,傳遞相似'<20>,'>20','^20'
參數完成一樣任務.
s='abc'
s.ljust(10)
'abc '
s.rjust(10)
' abc'
format(s,'<10')
format(s,'>10')
format(s,'^10')
format(123,'+')
format(-123,'+')
format(-123,'>+10'
format(-123,'=+10')
format(-123,'0=+10')
format(+546,'0=+10')
d={ 'lodDist':100.00,'SmallCull':0.04,'DistCull':500.00,'trilinear':40,'farclip':477,}
w=max(map(len,d.keys()))
for k,v in d.items():
print(k.ljust(w),':',v)
複製代碼
如何去掉字符串不須要的字符?
1.過濾掉用戶輸入中先後多餘的空白字符:
' nick2008@gmail.com'
2.過濾某Windows
下編輯文本中的'\r'
:
'hello world\r\n'
3.去掉文本中的Unicode
組合符號:
''ni há,chǐ fán''
方法一:字符串strip(),lstrip(),rstrip()
方法去掉字符串的兩端字符.
s=' hellowowd'
s.strip()
s.lstrip()
s.rstrip()
複製代碼
方法二:刪除單個位置的字符,能夠使用切片+拼接的方式.
s2='abc:1234'
s2[:3]+s2[4:]
'abc1234'
複製代碼
方法三:字符串的replace()
方法或者正則表達式re.sub()
刪除任意字符串
s3=' abc xyz '
s3.replace()
s3=' \t abc \t,xtz'
import re
re.sub('[ \t\n]','',s3)
複製代碼
方法四:字符串的translate()
方法,能夠刪除多種不一樣字符
s='abc1234xyz'
s.translate({ord('a'):'X'})
s.maketrans('abcxyz','XYZABC')
s.translate(s.maketrans('abcxyz','XYZABC'))
s.translate({ord('a'):None})
複製代碼
案例4:
s4='ni há,chǐ fán'
c=á
len(c)
import unicodedata
unicodedata.combining(c[1])
[ord(c) for c in s4 if unicodedata.combining(c)]
dict.formkeys([ord(c) for c in s4 if unicodedata.combining(c)],None)
s4.translate(dict.formkeys([ord(c) for c in s4 if unicodedata.combining(c)],None))
複製代碼
字符串的分割,拼接,去空格字符,能夠用的方法有split(),replace(),translate(),format(),strip()
...