1.如何拆分含有多种分隔符的字符串¶
In [1]:
#解决方案1.连续使用str.split(),每一次处理一种分隔符号;
def mySplit(s,ds):
res = [s]
for i in ds:
t = []
# 普通方法
#for x in res:
# t.extend(x.split(i))
# 列表解析
#[t.extend(y.split(i)) for y in res if y]
# map高阶函数,map生成可迭代对象
for z in map(lambda x: x.split(i), res):
t.extend(z)
# 以上三个方法都可以解决问题
res = t
# 去除空字符串
return [x for x in res if x]
In [2]:
s="ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz"
print(mySplit(s,",;|\t"))
In [3]:
#解决方案2.使用正则表达式的re.split(),一次性拆分字符串。
import re
s="ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz"
re.split(r'[,;|\t]+',s)
Out[3]:
2.如何判断字符串a是否以字符串b开头或结尾¶
In [4]:
import os,stat
In [5]:
os.listdir('.')
Out[5]:
In [6]:
s = 'heap.java'
In [7]:
s.endswith('.java')
Out[7]:
In [8]:
#endswith可以接受一个元组(不能使列表)为参数,满足其中之一,就会返回True
[name for name in os.listdir('.') if name.endswith(('.sh','.py'))]
Out[8]:
In [9]:
#st_mode是以文件权限相关的
os.stat('graph.py').st_mode
Out[9]:
In [10]:
#转换成八进制
oct(os.stat('graph.py').st_mode)
Out[10]:
In [11]:
os.chmod('graph.py',os.stat('graph.py').st_mode | stat.S_IXUSR)
In [12]:
ls -l
3.如何调整字符串中文本的格式¶
In [13]:
cat /var/log/alternatives.log
In [14]:
log = open('/var/log/alternatives.log').read()
In [15]:
import re
#按照顺序编号
print(re.sub('(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1',log))
In [16]:
print(re.sub('(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})',r'\g<month>/\g<day>/\g<year>',log))
4.如何将多个小字符串拼接成一个大的字符串¶
In [17]:
s1 = 'abcdefg'
s2 = '12345'
In [18]:
s1 + s2
Out[18]:
In [19]:
str.__add__(s1,s2)
Out[19]:
In [20]:
s1 > s2
Out[20]:
In [21]:
str.__gt__(s1,s2)
Out[21]:
In [22]:
pl = ['<0112>','<32>','<1024x768>','<60>','<1>','<100.0>','<500.0>']
In [23]:
s = ''
In [24]:
for p in pl:
s += p
print(s)
#存在资源浪费
In [25]:
s
Out[25]:
In [26]:
# 不存在临时变量的浪费
"".join(pl)
Out[26]:
In [27]:
# 存在数字和字符串
l = ['abc',123,45,'xyz']
In [28]:
# 列表解析
''.join([str(x) for x in l])
Out[28]:
In [29]:
# 生成器表达式,开销比列表解析式小
''.join(str(x) for x in l)
Out[29]:
5.如何对字符串进行左, 右, 居中对齐¶
In [30]:
s = 'abc'
In [31]:
s.ljust(20)
Out[31]:
In [32]:
s.ljust(20,'=')
Out[32]:
In [33]:
s.rjust(20)
Out[33]:
In [34]:
len(s.rjust(20))
Out[34]:
In [35]:
s.center(20)
Out[35]:
In [36]:
s = 'abc'
In [37]:
format(s,'<20')
Out[37]:
In [38]:
format(s,'>20')
Out[38]:
In [39]:
format(s,'^20')
Out[39]:
In [40]:
d = {
"a":100,
"as":0.01,
"wer":500.0,
"cc":12
}
In [41]:
d
Out[41]:
In [42]:
d.keys()
Out[42]:
In [43]:
# 通过map找出key的长度
list(map(len,d.keys()))
Out[43]:
In [44]:
max(list(map(len,d.keys())))
Out[44]:
In [45]:
w = max(list(map(len,d.keys())))
In [46]:
for k in d:
print(k.ljust(w),':',d[k])
6.如何去掉字符串中不需要的字符¶
In [47]:
s = ' abc 123 '
In [48]:
s.strip()
Out[48]:
In [49]:
s.lstrip()
Out[49]:
In [50]:
s.rstrip()
Out[50]:
In [51]:
s = '+++abc---'
In [52]:
s.strip('+-')
Out[52]:
In [53]:
s = 'abc:123'
In [54]:
s[:3] + s[4:]
Out[54]:
In [55]:
s = '\tabc\t123\txyz'
In [56]:
s
Out[56]:
In [57]:
# 替换单个字符
s.replace('\t','')
Out[57]:
In [58]:
s = '\tabc\t123\txyz\ropt\r'
In [59]:
import re
# 替换多个不同字符
re.sub('[\t\r]','',s)
Out[59]:
In [60]:
s = 'abc123def456xyz'
In [61]:
a = s.maketrans('abcxyz','xyzabc')
In [62]:
a
Out[62]:
In [63]:
s.translate(a)
Out[63]:
In [64]:
t = 'abc\refg\n234\t'
In [65]:
remap = {
# ord返回ascii值
ord('\t'): '',
ord('\n'): '',
ord('\r'): None
}
In [66]:
t.translate(remap)
Out[66]:
In [67]:
import sys
import unicodedata
s = 'āáǎà ōóǒò ēéěè īíǐì'
remap = {
# ord返回ascii值
ord('\t'): '',
ord('\f'): '',
ord('\r'): None
}
# 去除\t, \f, \r
a = s.translate(remap)
'''
通过使用dict.fromkeys() 方法构造一个字典,每个Unicode 和音符作为键,对于的值全部为None
然后使用unicodedata.normalize() 将原始输入标准化为分解形式字符
sys.maxunicode : 给出最大Unicode代码点的值的整数,即1114111(十六进制的0x10FFFF)。
unicodedata.combining:将分配给字符chr的规范组合类作为整数返回。 如果未定义组合类,则返回0。
'''
cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) #此部分建议拆分开来理解
b = unicodedata.normalize('NFD', a)
'''
调用translate 函数删除所有重音符
'''
print(b.translate(cmb_chrs))