⑴ python3 - 字元串中的變數替換
創建一個內嵌變數的字元串,指定字元串替換掉變數。
Python並沒有對在字元串中簡單替換變數值提供直接的支持。 通過使用字元串的 format() 方法來解決這個問題。比如:
或者,如果被替換的變數能在變數域中找到, 那麼可以結合使用 format_map() 和 vars() 。就像下面這樣:
format() 和 format_map() 的一個缺陷就是它們並不能很好的處理變數缺失的情況,比如:
在python3中,有一種可讀性更強,更方便的替代方法,在字元串前加 f ,需要被替代的變數外加花括弧 {} ,其命名與替代變數的名稱相同
多年以來由於Python缺乏對變數替換的內置支持而導致了各種不同的解決方案。在Python3中,推薦使用在字元串前加 f 的方法。
⑵ python字元串操作集合
把字元串變數和字面值連接起來,組成新的字元串。推薦3個方法:
對字元串進行單個字元索引時,無論是從前往後索引,還是從後往前索引,索引序號一定要在范圍內,否則出錯。
對字元串進行切片截取時,採用 str[start:end] 的方式。start,end可以正,可以負。且如果start標識的位置大於等於end標識的位置,則截取字元串為空。start,end超出字元串的極限位置,那麼就用最值。start默認為0,end默認為字元串長度。
一般的基於文本和行字元串處理,使用sed,awk,grep等工具就可以了,這些命令行工具用起來更便捷,但是也沒有python的這些函數強大。比如沒法實現非貪婪模式匹配。如下:
把連續的數字提取出來,其他的字元拋棄
python處理字元串,比linux命令要復雜一些,功能也更強大一些。對於簡單的處理任務,linux命令已經足夠,python為的是一些更復雜的處理操作。如果兩者都會,豈不是更好?
⑶ python字元串處理
s1=input('輸入字元串1:')
s2=input('輸入字元串2:')
s3=''.join([iforiins1ifinotins2])
print(s3)
⑷ Python如何去除字元串
去掉兩端字元串: strip(), rstrip(),lstrip()
123456789101112131415
#!/usr/bin/python3 s = ' -----abc123++++ ' # 刪除兩邊空字元print(s.strip()) # 刪除左邊空字元print(s.rstrip()) # 刪除右邊空字元print(s.lstrip()) # 刪除兩邊 - + 和空字元print(s.strip().strip('-+'))
刪除單個固定位置字元: 切片 + 拼接
123456
#!/usr/bin/python3 s = 'abc:123'# 字元串拼接方式去除冒號new_s = s[:3] + s[4:]print(new_s)
刪除任意位置字元同時刪除多種不同字元:replace(), re.sub()
1234567891011
#!/usr/bin/python3 # 去除字元串中相同的字元s = '\tabc\t123\tisk'print(s.replace('\t', '')) import re# 去除\r\n\t字元s = '\r\nabc\t123\nxyz'print(re.sub('[\r\n\t]', '', s))
同時刪除多種不同字元:translate() py3中為str.maketrans()做映射
1234567
#!/usr/bin/python3 s = 'abc123xyz'# a _> x, b_> y, c_> z,字元映射加密print(str.maketrans('abcxyz', 'xyzabc'))# translate把其轉換成字元串print(s.translate(str.maketrans('abcxyz', 'xyzabc')))
去掉unicode字元中音調
#!/usr/bin/python3 import sysimport unicodedatas = "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, \ra = 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))
⑸ Python中中文字元串怎麼處理
如果處理的字元串中出現中文表示的字元,要想不出錯,就得轉成unicode編碼了。具體的方法有:
1、decode(),將其他邊編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字元串str1轉換成unicode編碼;
2、encode(),將unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示將unicode編碼的字元串str2轉換成gb2312編碼;
3、unicode(),同decode(),將其他編碼的字元串轉換成unicode編碼,如unicode(str3, 'gb2312'),表示將gb2312編碼的字元串str3轉換成unicode編碼。
轉碼的時候一定要先搞明白字元串str是什麼編碼,然後decode成unicode,最後再encode成其他編碼。
另外,對一個unicode編碼的字元串在進行解碼會出錯,所以在編碼未知的情況下要先判斷其編碼方式是否為unicode,可以用isinstance(str, unicode)。
不僅是中文,以後處理含非ascii編碼的字元串時,都可以遵循以下步驟:
1、確定源字元的編碼格式,假設是utf8;
2、使用unicode()或decode()轉換成unicode編碼,如str1.decode('utf8'),或者unicode(str1, 'utf8');
3、把處理後字元串用encode()編碼成指定格式。
⑹ Python處理字元串必備方法
字元串是Python中基本的數據類型,幾乎在每個Python程序中都會使用到它。
▍1、Slicing
slicing切片,按照一定條件從列表或者元組中取出部分元素(比如特定范圍、索引、分割值)
▍2、****strip()
strip()方法用於移除字元串頭尾指定的字元(默認為空格或換行符)或字元序列。
在使用strip()方法時,默認去除空格或換行符,所以#號並沒有去除。
可以給strip()方法添加指定字元,如下所示。
此外當指定內容不在頭尾處時,並不會被去除。
第一個 前有個空格,所以只會去取尾部的換行符。
最後strip()方法的參數是剝離其值的所有組合,這個可以看下面這個案例。
最外層的首字元和尾字元參數值將從字元串中剝離。字元從前端移除,直到到達一個不包含在字元集中的字元串字元為止。
在尾部也會發生類似的動作。
▍3、****lstrip()
移除字元串左側指定的字元(默認為空格或換行符)或字元序列。
同樣的,可以移除左側所有包含在字元集中的字元串。
▍4、rstrip()
移除字元串右側指定的字元(默認為空格或換行符)或字元序列。
▍5、****removeprefix()
Python3.9中移除前綴的函數。
和strip()相比,並不會把字元集中的字元串進行逐個匹配。
▍6、removesuffix()
Python3.9中移除後綴的函數。
▍7、****replace()
把字元串中的內容替換成指定的內容。
▍8、****re.sub()
re是正則的表達式,sub是substitute表示替換。
re.sub則是相對復雜點的替換。
和replace()做對比,使用re.sub()進行替換操作,確實更高級點。
▍9、****split()
對字元串做分隔處理,最終的結果是一個列表。
當不指定分隔符時,默認按空格分隔。
此外,還可以指定字元串的分隔次數。
▍10、****rsplit()
從右側開始對字元串進行分隔。
▍11、****join()
string.join(seq)。以string作為分隔符,將seq中所有的元素(的字元串表示)合並為一個新的字元串。
▍12、****upper()
將字元串中的字母,全部轉換為大寫。
▍13、****lower()
將字元串中的字母,全部轉換為小寫。
▍14、capitalize()
將字元串中的首個字母轉換為大寫。
▍15、****islower()
判斷字元串中的所有字母是否都為小寫,是則返回True,否則返回False。
▍16、isupper()
判斷字元串中的所有字母是否都為大寫,是則返回True,否則返回False。
▍17、****isalpha()
如果字元串至少有一個字元並且所有字元都是字母,則返回 True,否則返回 False。
▍18、isnumeric()
如果字元串中只包含數字字元,則返回 True,否則返回 False。
▍19、isalnum()
如果字元串中至少有一個字元並且所有字元都是字母或數字,則返回True,否則返回 False。
▍20、count()
返回指定內容在字元串中出現的次數。
▍21、****find()
檢測指定內容是否包含在字元串中,如果是返回開始的索引值,否則返回-1。
此外,還可以指定開始的范圍。
▍22、rfind()
類似於find()函數,返回字元串最後一次出現的位置,如果沒有匹配項則返回 -1。
▍23、startswith()
檢查字元串是否是以指定內容開頭,是則返回 True,否則返回 False。
**
**
▍24、****endswith()
檢查字元串是否是以指定內容結束,是則返回 True,否則返回 False。
▍25、****partition()
string.partition(str),有點像find()和split()的結合體。
從str出現的第一個位置起,把字元串string分成一個3 元素的元組(string_pre_str,str,string_post_str),如果string中不包含str則 string_pre_str==string。
▍26、center()
返回一個原字元串居中,並使用空格填充至長度width的新字元串。
▍27、ljust()
返回一個原字元串左對齊,並使用空格填充至長度width的新字元串。
▍28、rjust()
返回一個原字元串右對齊,並使用空格填充至長度width的新字元串。
▍29、f-Strings
f-string是格式化字元串的新語法。
與其他格式化方式相比,它們不僅更易讀,更簡潔,不易出錯,而且速度更快!
▍30、swapcase()
翻轉字元串中的字母大小寫。
▍31、zfill()
string.zfill(width)。
返回長度為width的字元串,原字元串string右對齊,前面填充0。
參考文獻: https://mp.weixin.qq.com/s/9cuO-KL3g9ldqRGGZBVnjw
⑺ python3字元串與二進制怎麼實現互相轉換
b、虧弊d、o、x 分別表示 二進襲慶制、十進制、八進制和十六進制拍空握
num = 25
print('{:b}'.format(num))
print('{:d}'.format(num))
print('{:o}'.format(num))
print('{:x}'.format(num))
⑻ Python中字元串常用操作有哪些
字元串是 Python
中常用的數據類型,我們可以使用引號('或")來創建字元串,對字元串進行使用和操作,需要用到特定的函數,以下是常用的Python字元串操作方法:
1. capitalize()
作用:capitalize() 主要是用來實現字元串首字母大寫,其他字母小寫的功能。
實例:
1
2str1 = "oldboy"
print(str1.capitalize())
輸出結果:Oldboy
2. swapcase()
作用:swapcase() 主要是用來實現字元串大小寫反轉。
實例:
1
2str1 = " Oldboy"
print(str1.swapcase())
輸出結果:oLDBOY
3. title()
作用:title() 主要是用來實現字元串非字母隔開的部分,首字母大寫,其餘字母小寫。
實例:
1
2str1 = "Old boy e com"
print(str1.title())
輸出結果:Old Boy E Com
4. upper()
作用:upper() 主要是用來實現字元串所有字母全部大寫。
實例:
1
2str1 = "Oldboye"
print(str1.upper())
輸出結果:OLDBOYEDU
5. lower()
作用:lower() 主要是用來實現字元串所有字母全部小寫。
實例:
1
2str1 = "oLDBOYEDU"
print(str1.lower())
輸出結果:oldboye
6. center()
作用:center() 主要是用來實現字元串內容居中,填充物默認為空。
實例:
1
2
3str1 = "Oldboye"
print(str1.center(15))
print(str1.center(15,"*"))
輸出結果:
Oldboye
***Oldboye***
7. find()
作用:find() 主要作用是通過元素找索引,可以整體找,可以切片,找不到則返回-1。
實例:
1
2
3str1 = "Oldboye"
print(str1.find('b'))
print(str1.find('A'))
輸出結果:3 -1
8. index()
作用:index() 主要作用是通過元素找索引,可以整體找,可以切片,找不到會報錯。
實例:
1
2
3str1 = " Oldboye "
print(str1.index("b"))
print(str1.index("A"))
輸出結果:
0
Traceback (most recent call last):
File "", line 1, in
ValueError: substring not found
9. startswith(obj)
作用:startswith(obj) 主要作用是檢查字元串是否是以 obj 開頭,是則返回 True,否則返回 False。
實例:
1
2str1 = "Oldboye"
print(str1.startswith("O"))
輸出結果:True
10. endswith(obj)
作用:endswith(obj) 主要作用是檢查字元串是否是以 obj 開頭,是則返回 True,否則返回 False。
實例:
1
2str1 = " Oldboye "
print(str1.endswith("e"))
輸出結果:True
11. strip()
作用:strip() 主要作用是去除字元串前後兩端的空格或其他字元、換行符、tab鍵等。
實例:
1
2
3
4str1 = "***Oldboy***"
print(str1.strip("*")) #去除兩邊的*
print(str1.lstrip("*")) #去除左邊的*
print(str1.rstrip("*")) #去除右邊的*
輸出結果:
Oldboy
Oldboy***
***Oldboy
12. replace(oldstr, newstr)
作用:replace(oldstr, newstr)主要作用是替換字元串。
實例:
1
2str1 = "Oldboye"
print(str1.replace("boy","man"))
輸出結果:Oldmane
13. isalpha()
作用:isalpha()主要作用是要判斷字元串是否只由字母組成,是返回Ture,否返回False。
實例:
1
2
3
4str1 = "Oldboye"
str2 = 「Old boy e」
print(str1.isalpha())
print(str2.isalpha())
輸出結果:True False
14. isdigit()
作用:isdigit()主要作用是判斷字元串是否只由數字組成,是返回Ture,否返回False。
實例:
1
2
3
4str1 = "Oldboye"
str2 = 「520」
print(str1.isdigit())
print(str2.isdigit())
輸出結果:False True
15. format()
作用:format()主要作用是格式化字元串。
方式一:按位置傳參
1
2str1 = '我叫{},今年{}歲'.format('oldboy',30)
print(str1)
輸出結果:我叫oldboy,今年30歲
方式二:按索引傳參
1
2str1 = '我叫{0},今年{1}歲'.format('oldboy',30)
print(str1)
輸出結果:我叫oldboy,今年30歲
方式三:按key傳參
1
2str1 = '我叫{name},今年{age}歲'.format(age=30,name='oldboy')
print(str1)
輸出結果:我叫oldboy,今年30歲
16. count()
作用:count()主要作用是統計元素在字元串出現的次數。
1
2str1 = "oldboye"
print(str1.count(『o』)) #統計字元o在字元串中出現的次數
數據結果:2
⑼ python3如何把字元串轉換成系統默認編碼
python 3和2很大區別就是python本身改為默認用unicode編碼。
字元串不再區分"abc"和u"abc", 字元串"abc"默認就是unicode,不再代表本地編碼、
由於有這種內部編碼,像c#和java類似,再沒有必要在語言環境內做類似設置編碼,比如「sys.setdefaultencoding」;
也因此也python 3的代碼和包管理上打破了和2.x的兼容。2.x的擴展包要適應這種情況改寫。
另一個問題是語言環境內只有unicode怎麼輸出gbk之類的本地編碼。
答按慣例都在(序列化)輸出時才轉換成本地編碼。
比如
1
file.write("GBK的中文".encode("GBK"))
python環境內字元串用str.encode("GBK")方法輸出成位元組串用於和其他環境交流。
⑽ python3 對象 |字典|json|yaml|字元串 相互轉化
在研究 k8s 的yaml 配置文件的時候,我總擔心自己一不小心 會寫錯,所以我嚮往 使用將對象 序列化 yaml 的形式,
其實 python object 可以 直接 轉 yaml ,甚至也可以 直接 轉成yaml文件!!!
這里 會經常用到幾個 函數 vars() ast.
我們先嘗試用最笨的方法 實現 object到yaml 的轉化
在python對象 convert to dict 的形式,使用 vars()函數
然後 dict convert to json 使用 json.mps(dict)函數
然後 json converte to yaml 使用 ya= yaml.load(json.mps(dict)) 然後
再 yaml.safe_mp(ya,default_flow_style=False)
至此我們看到 從 python Object ---> dict ----> json ---> yaml 的轉化
其中 obj dict json yaml 轉 string ,只要 str()函數即可,或者 str(vars())結合
yaml 格式 寫入到文件 ,需要注意的是, open()函數 的滲昌mode 一定要是 'w' ,不能是』wb', b代表是二進制寫入
yaml 寫入的是dict str,使用 『wb' 會報錯,[yaml TypeError: a bytes-like object is required, not 'str']
【出現該錯誤往往是通過open()函數打開文本文件時,使用了『rb』屬性,如:fileHandle=open(filename,'rb'),則此時是通過二進制方式打開文件的,所以在後面處理時如果使用了str()函數,就會出現該錯誤,該錯誤不會再python2中出現。
具體解決方法有以下兩種:
第一種胡喊啟,在open()函數中使用『r』屬性,即文本方式讀取,而不是『rb』,以二進制文件方式讀取,可以直接解決問題。
第二種,在open()函數中使用『rb』,可以在使用之前進行轉換,有以下實例,來自: http://stackoverflow.com/questions/33054527/python-3-5-typeerror-a-bytes-like-object-is-required-not-str 】
其實 python object 可以 直接 轉 yaml ,甚至也可以 直接 轉成yaml文件!!!
比如我已經定義了一個 Dog python class,他有 好幾褲如個屬性 並已經賦值初始化了
另外生成 yaml 對象
生成yaml文件
結果是
反過來 yaml ----> json ---> 持久化 json 文件 indent=1屬性是為了讓 json 不以單行展示,而是展開
注意的是 python 的 dict 和set 很相似 ,都是 { }, set 里是list, dict 是鍵值對
【# set object is not JSON serializable [plicate]
】
打開 demo.json
yaml ---> dict
yaml ---> python object
json --> dict
json.loads()
dict--> json
json.jumps()
str ---> dict
newdict=dict(str)
json -- > python object
一個python object無法直接與json轉化,只能先將對象轉化成dictionary,再轉化成json;對json,也只能先轉換成dictionary,再轉化成object,通過實踐,源碼如下:
yaml --> python object
對yaml,也只能先轉換成json --->dictionary,再轉化成object,通過實踐,源碼如下:
dict -- ->python object
python對象 默認都有一個 私有的屬性 dict 取值 就是 object的 字典形式, 賦值就就可以給對象屬性對應賦值
例如json 轉 對象
對象 轉 json
Python之dict(或對象)與json之間的互相轉化
在Python語言中,json數據與dict字典以及對象之間的轉化,是必不可少的操作。
dict字典轉json數據
對象轉json數據
json數據轉成dict字典
json數據轉成對象
json的load()與mp()方法的使用
mp()方法的使用