python教程(六)·字元串

来源:https://www.cnblogs.com/featherl/archive/2019/03/09/10503658.html
-Advertisement-
Play Games

我們已經學習了字元串的使用方法,我們還學習了使用索引和分片操作字元串,經歷了這麼長的時間,相信大家也有所掌握;本節將討論並學習字元串的格式化與字元串的常用方法 <! more 字元串格式化 字元串是序列的一種,所以所有的通用序列操作當然都適用啦,這裡就不再重覆了,下麵我們來探討字元串的格式化 何為字 ...


我們已經學習了字元串的使用方法,我們還學習了使用索引和分片操作字元串,經歷了這麼長的時間,相信大家也有所掌握;本節將討論並學習字元串的格式化與字元串的常用方法

字元串格式化

字元串是序列的一種,所以所有的通用序列操作當然都適用啦,這裡就不再重覆了,下麵我們來探討字元串的格式化

何為字元串格式化?字元串格式化就是指把數據按照一定的格式組成一個字元串,這貌似很難說清楚,下麵來看個例子:

現有下列變數:

year = 2018
month = 3
day = 9

我們要輸出格式為“年|月|日”的字元串,那麼我們可以使用加號+來進行拼接字元串:

output = str(year) + '|' + str(month) + '|' + str(day)
print(output)

我們將year、month、day三個變數按照一定的格式組成了一個字元串,這樣的過程就可以稱為字元串格式化。

然而,今天我們來探討的不是以這種拼接方式實現的字元串格式化,而是以用數據填充模板的方式來實現,也就是我們給出一個模板“年|月|日”,我們只需要提供三個值,年、月、日,然後就生成我們想要的字元串。

python支持的字元串格式方式有兩種,下麵來一一介紹

傳統方式

第一種字元串格式化使用百分號%來實現,在%的左邊是格式化字元串,也就是我們的模板,右邊是我們用來格式化的數據(元組類型),也就是用來填充的值,舉例如下:

>>> year = 2018
>>> month = 3
>>> day = 9
>>> output = '%s|%s|%s' % (year, month, day)
>>> print(output)
2018|3|9
>>> 

模板字元串中的%s叫做轉換說明符,也叫占位符,就是用來占著位置,等待被替換成提供的值,s表示這個位置將替換成字元串,如果值不是字元串,就使用str函數轉換成字元串,完整的轉換說明符,由以下部分按順序組成:

  1. %字元:這是轉換說明符的開始
  2. 轉換標誌(可選):-表示左對齊,+表示在數值前加上正負號,空格表示正數之前保留空格,0表示轉換值後位數不足就用0填充
  3. 最小欄位寬度(可選):轉換後的值不能短於該值指定的寬度,如果該位置寫的是*,則寬度由%右邊的元組提供
  4. .後跟精度值(可選):如果轉換的是浮點數,精度值就表示小數點後的位數,如果轉換的是字元串,精度值就表示最大的欄位寬度,如果為*,那麼該值由%右邊的元組提供
  5. 轉換類型:看下表:
轉換類型 含義 例子
d或i 有符號的十進位整數 '%d' % 123 => '123'
o 無符號的八進位整數 '%o' % 8 => '10'
u 無符號十進位整數 '%u' % 123 => '123'
x 無符號十六進位整數(小寫) '%x' % 123 => '7b'
X 無符號十六進位整數(大寫) '%x' % 123 => '7B'
e 科學計數法表示的浮點數(小寫) '%e' % 123.456 => '1.234560e+02'
E 科學計數法表示的浮點數(小寫) '%E' % 123.456 => '1.234560E+02'
f,F 十進位浮點數 '%f' % 123.456 => '123.456000''%F' % 123.456 => '123.456000'
g 如果指數大於-4或者小於精度值則和e相同,其它情況與f相同
G 如果指數大於-4或者小於精度值則和E相同,其它情況與F相同
c 單字元串(ASCII碼值或則單字元字元串) '%c' % 65 => 'A''%c' % 'a' => 'a'
r 字元串(使用repr函數轉換任意python對象) 'hello %r!' % 'world' => "hello 'world'!"
s 字元串(使用str函數轉換任意python對象 'hello %s!' % 'world' => 'hello world!'

看到這個表相信大家都暈了,告訴大家一個秘密,我從來沒有記住這個表!⊙▽⊙

因為一般來說,大多數的值都是可以轉換成字元串的,所以最常用的轉換說明符也就一個%s(~ ̄▽ ̄)~

雖然不需要記住那麼多的轉換類型,但有些細節還是要記住的!

欄位寬度和精度

欄位寬度是轉換後的值所占的最少字元個數,精度就是轉換後的小數位數(對於浮點數),或者轉換後最大字元個數(對於字元串),這兩個參數都是整數或者星號*,它們之間用點.分隔(如果只指定寬度不指定精度就不必要使用點.),舉例如下:

>>> '%9f' % 1.0 # 欄位寬度為9
' 1.000000'
>>> '%9.1f' % 1.0 # 欄位寬度為9精度為1
'      1.0'
>>> '%.2f' % 1.1 # 精度為2
'1.10'

可以看到,轉換後的字元串寬度不足時,預設在左邊用空格填充

使用星號*的時候,需提供相應的寬度或精度:

>>> '%.*s' % (5, 'hello world!')  # 精度為5
'hello'

標誌

緊接著%,我們可以使用一個標誌,這個標誌可以是0+-或者空格

  • 0表示數字的填充符使用0:
    python >>> '%09f' % 1.0 '01.000000'
  • +表示給數值加上正負號:
    python >>> '%+d' % 12 '+12' >>> '%+d' % -12 '-12'
  • -表示左對齊數值:
    python >>> '%-9f' % 1.0 '1.000000 '
  • 空格表示在正數前加上空格:
    python >>> '% d' % 12 ' 12' >>> '% d' % -12 '-12'

補充%%表示百分號%本身

學過C語言的都知道,這種傳統的字元串格式化方式和C語言的字元串格式化方式大同小異,但是這種方式正逐漸被python拋棄,python官方推薦下麵這種新的字元串格式化方式

更先進的方式

python的字元串有一個format方法,這個方法正是使用新版字元串格式化的渠道,下麵是用法:

基本用法:使用{}做占位符,按順序填充參數:

>>> 'hello {}, I am {}'.format('world', 'Lee')
'hello world, I am Lee'

使用數字指定參數的位置(從0開始):

>>> 'Between {0} and {1}, I like {0}'.format('apple', 'banana')
'Between apple and banana, I like apple'

使用關鍵字參數指定參數:

>>> 'I am {name}, and my age is {age}.'.format(name='Lee', age=18)
'I am Lee, and my age is 18.'
>>> d = {'name': 'Lee', 'age': 18}  # 使用字典
>>> 'I am {name}, and my age is {age}.'.format(**d)  # 展開字典
'I am Lee, and my age is 18.'

還可以通過列表索引來指定參數:

>>> lst = ['Lee', 18]
>>> 'I am {0[0]}, and my age is {0[1]}.'.format(lst)
'I am Lee, and my age is 18.'

花括弧{}中使用冒號:分隔,左邊指定欄位名(數字,關鍵字等),右邊按順序指定:

  1. 填充字元:用於填充的字元,預設為空格
  2. 對齊方式
    • ^ 居中
    • < 左對齊
    • > 右對齊
  3. 正負號
    • + 給數字加上正負號
    • - 只給負數加上負號(預設)
    • 空格 給正數加上空格
  4. 寬度:指定最小欄位寬度,以0開始表示用0填充
  5. 精度:在寬度欄位後添加一個點.再寫此欄位,表示小數點後的位數(對於浮點數),或者最大欄位寬度(對於字元串)
  6. 轉換類型:大致與傳統方式相同

補充:兩個{表示{本身,兩個}表示}本身。

讀者可以參照這篇文章,寫得比較詳細:Python 中 str.format() 方法詳解


字元串方法

瞭解了這麼多的字元串格式化方式,該介紹幾個字元串常用方法了。

要記住字元串是不可變的,所以下麵介紹到的方法都不會改變原來的字元串!

find

find方法用於在一個字元串中查找一個子串,返回第一個匹配字串的首字元索引,如果沒有找到就返回-1,舉例如下:

>>> 'hello Lee'.find('Lee')
6
>>> 'hello Lee'.find('jack')
-1

還可以指定查找的起點、終點(不包含):

>>> s = 'hello Lee'
>>> s.find('Lee', 7)  # 指定起點
-1
>>> s.find('Lee', 0, 9)  # 指定起點和終點
6

replace

replace方法用於返回替換後的字元串,如:

>>> 'hello world!'.replace('world', 'Lee')  # 用'Lee'替換'world'
'hello Lee!'

translate

和replace方法類似,但是可以同時替換多個字元,用法如下:

>>> table = str.maketrans('hw', 'HW') # 製作映射表,h=>H,w=>W
>>> table
{104: 72, 119: 87}
>>> 'hello world'.translate(table)
'Hello World'

strip

該方法用於去除兩側指定的字元串(預設為空白符,即空格、製表符、換行符等),如:

>>> ' hello world     '.strip()
'hello world'
>>> '**hello world***'.strip('*')
'hello world'

補充:lstrip只作用於字元串左端,rstrip只作用於字元串右端

split和join

split方法用來講字元串分割成序列,如:

>>> s = 'Guangdong, Zhejiang, Shanghai'
>>> s.split(',')  # 用逗號','作為分割符
['Guangdong', ' Zhejiang', ' Shanghai']
>>> s.split()  # 預設使用空白符(空格、製表符、換行符等)作為分割符
['Guangdong,', 'Zhejiang,', 'Shanghai']
>>> s.split(',', 1)  # 分割1次  
['Guangdong', ' Zhejiang, Shanghai']

補充:rsplit從右邊開始分割

join用於將序列連接成字元串,如:

>>> ','.join(['hello', 'world'])
'hello,world'

lower和upper

lower方法和upper方法分別返迴轉換成小寫和大寫的字元串,如:

>>> 'AbcD'.lower()
'abcd'
>>> 'AbcD'.upper()
'ABCD'

本節內容較多,好好消化吧!

不知道下一次有時間更新又是什麼時候咯 ヾ( ̄▽ ̄)Bye~Bye~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • three.js,webGL講解機房微模塊的三維實現,3D庫房,3D機房,普通3D機房搭建,機櫃、伺服器、埠實時監控 數據聯動展示,機櫃動態添加、伺服器上下架,動力環境數據可視化展示(溫濕度雲圖,防盜門禁,配店,管線控制)、告警展示 ...
  • Singleton模式 單例模式,也交單子模式,有時候系統只需要擁有一個全局對象。 這種模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。 一個類的返回對象一個引用(並且還是同一個)和一個獲得該實 ...
  • 併發編程的三個核心問題: 1. 分工 : 高效的拆解任務分給線程 2. 同步 : 線程之間的協作 3. 互斥 : 保證同一時刻只允許一個線程訪問共用資源 這個其實不難理解,做個簡單的比喻,我們團隊做一個項目的時候肯定是先分配任務(分工),然後等到任務完成進行合併對接(同步),在開發過程中,使用版本控 ...
  • 這個月很過的很棒,情人節轉天就把戒指定下來了,她同學搞這個的,有點倉促,沒怎麼選樣子,不過比較便宜,主要是她能喜歡就好! 游戲部分: 上周末晚上我在家靈光閃現,把招數的按鍵匹配部分調好了,這幾天又優化了一下,現在基本上人物的移動和升龍拳等手感都沒問題了! 昨天和今天一直在把原先藍圖中的各種邏輯往C+ ...
  • 驗證碼的作用: 驗證碼在現在來說,是很常見的東西,可以一定程度的保護網站,減少低級的攻擊,但是高級的還是不太好防範,所以現在的驗證碼平臺也在升級強化,為了把人和機器嚴格分開,但是這東西,永遠都是看哪一方技術高低的,誰的技術高級,誰就能幹倒另一方了。所以驗證碼可以說是所有的面向用戶的平臺都會用到的,所... ...
  • 將view中的文本內容用自定義的顏色顯示是一種十分常見的需求。今天我們稍微改變些“花樣”。 本文索引 需求定義 需求分析 代碼實現 思考題 需求定義 我們的需求很簡單,現在有一些在view中的text內容需要使用彩色顯示,而且不使用單一的一種顏色,而是多種顏色漸變實現的彩虹效果。 文字描述可能比較抽 ...
  • 今天分享下各種快速冪(有點坑) ...
  • 我是一個小白而已,面試官居然問我,研究過演算法嗎?用遞歸寫冒泡排序會嗎?差點瘋掉,說實在的真沒怎麼用過遞歸。 我跟他說,你讓我用電腦試試,我肯定能整齣來,結果面試官沒給機會。特此紀念一下吧! 遞歸是什麼?通俗的講:在方法內部調用自己(相當於現實中的“鬼打牆”,不過我也沒遇到過)。 花了幾分鐘整齣來的, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...