來自:Python編程與實戰(微信號:pthon1024),作者:Jerryning
沒有辦法轉,整個復制下來了
本文要點
-
字符串拼接
-
拆分含有多種分隔符的字符串
-
判讀字符串a是否以字符串b開頭或結尾
-
調整字符串中文本的格式
-
對字符串進行左,右,居中對齊
-
刪除字符串中不需要的字符
字符串拼接
實際場景:把列表中的數據拼接成一個字符串
解決方案:使用 str.join() 方法
>>>?li?=?[
'cxk',?
'cxk',?
'kk',?
'caibi']
>>>?
''.join([str(i)?
for?i?
in?li])
'cxkcxkkkcaibi'
推薦使用生成器表達式,如果列表很大,可以節省很多內存空間
>>>?
''.join(str(i)?
for?i?
in?li)
'3cxkkkcaibi'
拆分含有多種分隔符的字符串
實際場景:把某個字符串依據分割符號拆分不同的字段,該字符串包含多種不同的分隔符
s?=?
"ab;fd/ft|fs,f\tdf.fss*dfd;fs:uu}fsd"
1.使用 python 中的 split() 方法,由于 split 一次處理一個分隔符,例如:
>>>?res?=?s.split(
';')
>>>?res
[
'ab',?
'fd/ft|fs,f\tdf.fss*dfd',?
'fs:uu}fsd']
所以我們需要根據字符串中的分隔符,依次分割,可以是 map 函數!
>>>?list(map(
lambda?x:?x.split(
"|"),?res))
[[
'ab'],?[
'fd/ft',?
'fs,f\tdf.fss*dfd'],?[
'fs:uu}fsd']]
結果變成了一個二維列表,而我們想要的結果是一維列表,怎么辦?
創建一個臨時列表保存結果。
>>>?t?=?[]
>>>?list(map(
lambda?x:?t.extend(x.split(
"|")),?res))
[
None,?
None,?
None]
>>>?t
[
'ab',?
'fd/ft',?
'fs,f\tdf.fss*dfd',?
'fs:uu}fsd']
結果符合我們的預期!接下來繼續處理剩余的分隔符,重復動作,用 for 循環搞定!
最終代碼如下:
def?
my_split
(s,?ds):
????res?=?[s]
????
for?d?
in?ds:
????????t?=?[]
????????list(map(
lambda?x:?t.extend(x.split(d)),?res))
????????res?=?t
????
return?res
將字符串和字符串中所有的分隔符傳入,結果如下:
s?=?
"ab;fd/ft|fs,f\tdf.fss*dfd;fs:uu}fsd"
print(my_split(s,?
";/|,.}:*\t"))
運行結果:['ab', 'fd', 'ft', 'fs', 'f', 'df', 'fss', 'dfd', 'fs', 'uu', 'fsd']
2.使用 re 模塊的中 split() 方法
re() 也給我們提供了 split() 方法,可以一次性分隔字符串!
import?re
s?=?
"ab;fd/ft|fs,f\tdf.fss*dfd;fs:uu}fsd"
print(re.split(
'[;/|,.}:*\t]',?s))
結果一致,是不是很簡單粗暴!
判讀字符串a是否以字符串b開頭或結尾
實際場景:比如某目錄下有一系列文件:
編寫程序給其中所有 .txt 文件和 .py 文件加上用戶可執行權限
解決方案:
使用字符串 str.startswith() 和 str.endswith()
找出以 .txt 和 .py 結尾的文件,其接受一個元組
>>>?
import?os
>>>?os.listdir(
".")
[
'app',?
'config',?
'requirements.txt',?
'run.py',?
'__pycache__',?
'gunicorn.conf.py',?
'chromedriver',?
'login_after2.png',?
'readme.txt',?
'slide.png',?
'test.py',?
'logs',?
'chrome-linux.zip',?
'gunicorn.pid',?
'asgi.py',?
'chrome-linux']
>>>?[name?
for?name?
in?os.listdir(
".")?
if?name.endswith((
".txt",?
".py"))]
[
'requirements.txt',?
'run.py',?
'gunicorn.conf.py',?
'readme.txt',?
'test.py',?
'asgi.py']
調整字符串中文本的格式
實際案列:例如在日志文件中,其中日期格式為'yyyy-mm-dd':
我們想把其中的日期改為美國日期格式'mm/dd/yyyy'.比如 2019-06-12 改成 06/12/2019 格式
解決方案:使用 re 中的 sub() 方法做字符串替換
利用正則表達式中的捕獲組,捕獲每個部分的內容,然后在替換在替換的字符串中調整各個捕獲組的順序!
代碼如下:
import?re
with?open(
"info.log",?
"r",?encoding=
"utf-8")?
as?f:
????file?=?f.read()
print(re.sub(
'(\d{4})-(\d{2})-(\d{2})',?
r'\2/\3/\1',?file))
捕獲組中每組需要用括號括起來,然后默認從左至右分為組1, 組2…
下一個參數是我們要替換的格式,用 1,2,3 分別表示組1, 組2…
運行結果如下:
對字符串進行左,右,居中對齊
解決方案:
1.使用字符串中的 str.ljust(), str.rjust(), str.center() 進行左右居中對齊!
以上三種方法的基本用法:
>>>?s?=?
'abc'
>>>?s.ljust(
20,?
'=')
'abc================='
>>>?s.ljust(
20)
'abc???????????'
三種方法都可以設置默認填充值
2.使用內置的 format() 方法
>>>?format(s,?
">20")
'?????????????????abc'
>>>?format(s,?
"<20")
'abc?????????????????'
>>>?format(s,?
"^20")
'????????abc?????????'
刪除字符串中不需要的字符
實際案例 :
-
過濾掉用戶輸入中前后多余的空白字符:“ ? ?nick2008@gmail.com ? ?”
-
過濾掉某 windows 下編輯文本中的 “\r” :“hello world \r\n”
-
去掉文本中的 unicode 組合符號(音調):nǐ hǎo mā
解決方案 :
-
使用 str.strip(), str.lstrip(), str.rstrip() 方法去掉字符串兩端字符
-
使用 str.replace() 或者正則中的 re.sub()
-
使用字符串中 str.translate() 方法,可以同時刪除多個不同的字符
我踏過的,是不曾虛度的昨天,我去向的 ,永遠是比今天更好的遠方
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
