一. 如何將多個小字符串拼接成一個大的字符串
實際案例:
- 在設計某網(wǎng)絡程序時,我們自定義了一個基于UDP的網(wǎng)絡協(xié)議,按照固定次序向服務器傳遞一系列參數(shù):
hwDetect: "<0112>"
gxDepthBits: "<32>"
gxResolution: "<1024x768>"
gxRefresh: "<60>"
fullAlpha: "<1>"
lodDist: "<100.0>"
DistCull: "<500.0>"
解決方案:
方法1. 迭代列表,連續(xù)使用 ‘+’ 操作,依次拼接每一個字符
方法2. 使用 str.join() 方法,更加快速的拼接列表中所有字符。(推薦使用)
代碼示例:
# _*_ coding:utf-8 _*_
# @Author : TianYu
# @Time : 2017/10/13 16:19
# @File : 如何將多個小字符串拼接成一個大的字符串.py
#方法 1 :使用 '+' 號
s1 = 'abcdefg'
s2 = '12345'
print(s1 + s2)# 本質上是運算符重載:str.__add__(s1, s2)
print(s1 > s2) #True :str.__gt__(s1, s2)
#################################################
pl = ["<0112>", "<32>", "<1024x768>", "<60>", "<1>", "<100.0>", "<500.0>"]
# 方法 1 (不推薦,存在巨大的浪費)
s = '' #空字符串進行拼接
for p in pl:
s += p
print(s)
#方法 2(推薦使用,列表很長的情況下):使用str.join()方法,更加快速的拼接列表中的所有字符串
print(''.join(pl)) #一次性的拼接,不浪費
#當列表中的數(shù)據(jù)類型不同時 如何進行字符串的拼接?
s = ['abc', 123, 45, 'xyz']
print(''.join([str(x) for x in s])) #列表解析,不推薦,生成新的列表,在文件很大的情況下不適用
#推薦使用生成器表達式,[] 變?yōu)?()
print(''.join((str(x) for x in s))) #(str(x) for x in s)是generator object(生成器對象)
二. 如何對字符串進行左、右、居中對齊?
實際案例:
- 某個字典存儲一系列屬性值,
{
"DistCull":500.0,
"SmallCull":0.04,
"farclip":366,
"lodDist":100.0,
"trilinear":40
}
在程序中,我們想以以下工整的格式將其內容輸出,如何處理?
輸出:
DistCull : 500.0
SmallCull : 0.04
farclip : 366
lodDist : 100.0
trilinear : 40
解決方案:
方法1.使用字符串的 str.ljust(), str.rjust(), str.center() 方法進行左右居中對齊。
方法2.使用 format()方法,傳遞類似'<20', '>20', '^20'參數(shù)完成同樣任務。
代碼示例:
# _*_ coding:utf-8 _*_
# @Author : TianYu
# @Time : 2017/10/13 16:38
# @File : 如何對字符串進行左右居中對齊.py
#方法1 :使用字符串的str.ljust(),str.rjust(),str.center()進行左右居中對齊。
s = 'abc'
print(s.ljust(20, '='))# 寬度為20,不足的用 '=' 補齊:abc=================
print(s.rjust(20, '*'))#與左對齊相同:*****************abc
print(s.center(20, '-'))#同上:--------abc---------
#方法2 :使用format()方法,傳遞類似'<20','>20','^20'參數(shù)完成左右中對齊
s1 = 'xyz'
print(format(s, '>20'))#右對齊,寬度為20,不足的用空格填充
print(format(s, '<20'))#左對齊,同上
print(format(s, '^20'))#居中,同上
#示例:
d ={
"DistCull":500.0,
"SmallCull":0.04,
"farclip":366,
"lodDist":100.0,
"trilinear":40
}
w = max(map(len,d.keys()))#找出字典中鍵的最大長度
for k in d:
print(k.ljust(w),':', d[k])
"""
輸出結果:
DistCull : 500.0
SmallCull : 0.04
farclip : 366
lodDist : 100.0
trilinear : 40
"""
三. 如何去掉字符串中不需要的字符?
實際案例:
- 過濾掉用戶輸入中前后多余的空白字符:
‘ nick2008@gmail.com ’ - 過濾某windows下編輯文本中的‘\r’:
'hello world\r\n' - 去掉文本中的unicode組合符號(音調):
u‘ní hǎo, chī fàn’
解決方案:
方法1. 字符串strip(), lstrip(), rstrip()方法去掉字符串兩端字符
方法2. 刪除單個固定位置的字符,可以使用切片+拼接的方式
方法3. 字符串的replace()方法或正則表達式re.sub()刪除任意位置字符。
方法4. 字符串translate()方法,可以同時刪除多種不同字符。
python3的 translate()方法用法。
注意:translate()方法的使用在Python2與Python3中存在很大的差異,主要是因為Python2與3中字符串的語義的變化:
Python2 python3
----------------------------
str -> bytes
unicode -> str
代碼示例:
# _*_ coding:utf-8 _*_
# @Author : TianYu
# @Time : 2017/10/14 21:24
# @File : 如何去掉字符串中不需要的字符.py
#方法 1 :str.strip()
s = ' abc 123 '
print(s.strip()) #去掉字符串兩邊(開頭與結尾)的空白字符
print(s.lstrip()) #去掉字符串左邊的空白字符
print(s.rstrip()) #去掉字符串右邊的空白字符
s = '---abc++++'
print(s.strip('-+')) #去掉字符串兩邊與傳入的參數(shù)匹配的字符
#####################################
#方法 2 :切片+拼接
s = 'abc:123'
s1 = s[:3] + s[4:] #切片操作,左閉右開
print(s1)
#方法 3 :replace() 或者 re.sub()
s = '\tabc\t123\txyz' #字符串中帶有3個空白符 \t
print(s.replace('\t',''))
import re
s = '\tabc\t123\txyz\ropq\r'
s1 = re.sub('[\t\r]', '', s)#替換任意多的字符
print(s1)
#方法 4 :translate()
#(1)
s = 'abc1230323xyz'
# str.maketrans('abcxyz','xyzabc') #映射表關系,進行加密:abc--xyz, xyz--abc
s1 = s.translate(str.maketrans('abcxyz','xyzabc'))
print(s1) #xyz1230323abc
#(2):與Python2的差異是:Python3中是對'bytes'進行處理,而不是‘string'
s2 = b'abc\refg\n\2343\t'
#translate()有兩個參數(shù):
# 第一個為None代表不做任何映射關系,第二個參數(shù)表示要刪除的字符
print(s2.translate(None ,b'\r\t\n') )
# 轉換為大寫,并刪除字母o
bytes_tabtrans = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
print(b'runoob'.translate(bytes_tabtrans, b'o'))
##############################
#去除Unicode字符中的音調
import sys
import unicodedata
s = "Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng"
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代碼點的值的整數(shù),即1114111(十六進制的0x10FFFF)。
unicodedata.combining:將分配給字符chr的規(guī)范組合類作為整數(shù)返回。 如果未定義組合類,則返回0。
'''
cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) #此部分建議拆分開來理解
b = unicodedata.normalize('NFD', a)
'''
調用translate 函數(shù)刪除所有重音符
'''
print(b.translate(cmb_chrs))

要努力要奮斗