Python3中String(字符串)操作详解

String(字符串)作为Python中的基础数据类型之一,在每个项目中都必然会用到。我们经常需要对字符串进行一些列的操作,比如:拼接、查找、比较、设置对齐、拆分、截取、搜索、替换、组合、编码等等操作。那么,对于字符串的操作有个一个详细地了解就显得十分必要。以下是部分String的操作方法:

大小写操作

在英文中、页面的展示中,我们经常需要对字符串进行大小写转换的操作。如全部转换成大写、小写、首字母大写等。

全部转换成大写 -> string.upper()
str = 'louis drink'
str.upper()    # 'LOUIS DRINK'

使用upper()方法,会将字符串中的所有英文字母转换成大写格式。

全部转换成小写 -> string.lower()
str = 'LOUIS DRINK'
str.lower()    # 'louis drink'

使用lower()方法,会将字符串中的所有英文字母转换成小写格式。

首字母大写 -> string.capitalize()
str = 'louis drink'
str.capitalize()    # 'Louis drink'

使用capitalize()方法,会将整个字符串的首字母转换成大写格式。

所有单词首字母大写 -> string.title()
str = 'louis drink'
str.title()    # 'Louis Drink'

使用title()方法,会将整个字符串中的每一个单词的首字母转换成大写格式。

查询 -> string.index() / string.find()

Python3中的字符串的查询有两种方法,分别是string.index()与string.find方法。两者有细微差别:

name = 'Louis Drink'
name.index('i')    # 3
name.index('a')    # 崩溃
name.find('i')     # 3
name.find('a')     # -1

从上述代码中,我们不难看出,当查询字符串中确定有的子字符串的情况下,string.index()方法和string.find()的方法没有区别,都是返回的字符串中所含有的子字符串的首字母的下标位置。

然而当在查询字符串中没有含有的子字符串的情况下,string.index()方法会直接崩溃,而string.find()方法是返回一个int类型的数字-1。在这种情况下,显然string.find()方法会更具有容错性,所以在开发中,推荐使用string.find()方法。

统计 -> string.count()

name = 'Louis Drink'
name.count('i')    # 2

string.count()方法是用来统计,该子字符串在字符串中出现的次数。如我们在上述例子中,统计字符串'i'在name中出现了几次。返回结果2则表示'i'在name中,一共出现了两次。

字符串拼接

我们在调试、展示页面、返回信息的时候,经常会使用固定语句格式拼接上一些我们的变量,如,'欢迎{人名}莅临检查!'中,人名就是一个变量。那么字符串的拼接有几种方法呢?

使用+直接拼接
first_name = 'Drink'
last_name = 'Louis'
str = last_name + ' ' + first_name    # 'Louis Drink'

几个字符串可以直接使用+来拼接起来,格式就如上述代码所示。

使用占位符拼接
name = 'Drink'
place = 'Xiamen'
'Hello %s, welcome to %s!' %(name, place)    
# 'Hello Drink, welcome to Xiamen!'

这里使用%s占位符,表示在该地方需要拼接入一个字符串参数。同时这里也可以替换成其他的占位符,详细的占位符信息请查看:Python3中的占位符详解。

使用格式码拼接 -> string.format()
name = 'Drink'
place = 'Xiamen'
'Hello {}, welcome to {}!' .format(name, place)    
# 'Hello Drink, welcome to Xiamen!'

使用.format方法的话,可以直接用{}代替占位符,来标记我们需要添加信息的位置。每一个{}对应一个需要拼接的地方,所以后面.format里的参数一定要与前边的{}数量一致。
.format()拼接还有另一种更清晰的方式,但是使用起来相对麻烦。

name = 'Drink'
place = 'Xiamen'
'Hello {person_name}, welcome to {person_city}!' .format(person_name = name, person_place = place)    
# 'Hello Drink, welcome to Xiamen!'
Python3中特有的拼接方式
name = 'Drink'
place = 'Xiamen'
f'Hello {name}, welcome to {place}!' 
# 'Hello Drink, welcome to Xiamen!'

我们可以在字符串前加个字母f,然后直接在字符串中的{}中填入我们需要拼接的变量名称,就可以直接拼接。使用这种方法,无需在字符串后面再去书写%(变量名)或.format(变量名)。会更为简洁和清晰。推荐使用这种方法!

对齐 -> string.center() / string.ljust() / string.rjust()

在开发中,为了保证美观,我们常常会需要使字符串居中、左对齐、右对齐等,这就需要用到对齐的操作方法。

name = 'Louis Drink'
name.center(40)        # '              Louis Drink               '
name.ljust(40, '-')    # 'Louis Drink-----------------------------'
name.rjust(40, )       # '                             Louis Drink'

从上述的代码中不难看出,string.center(), string.ljust(), string.rjust分别是对应居中对齐、左对齐、右对齐的方法。每个方法都有两个参数:

  • 第一个参数:width(宽度)(必填)
  • 第二个参数:填充符(不填默认填充空格)

以什么结束 -> string.endswith()

name = 'Louis Drink'
name.endswith('k')     # True
name.endswith('nk')    # True
name.endswith('i')     # False

使用string.endswith()方法时,会去判断字符串的最后的子字符串与你在方法中填入的字符串是否相同。结果返回bool类型的True或False。

判断

'123'.isalnum()              # True
'123abc'.isalnum()           # True
'123.abc'.isalnum()          # False

'abc'.isalpha()              # True
'123abc'.isalpha()           # False

'123'.isdigit()              # True
'123.123'.isdigit()          # False

'abc'.isidentifier()         # True
'abc123'.isidentifier()      # True
'123abc'.isidentifier()      # False
'123'.isidentifier()         # False
''abc.123'.isidentifier()'   # False

'LOUIS DRINK'.isupper()      # True
'Louis Drink'.isupper()      # False
'louis drink'.islower()      # True
'Louis Drink'.islower()      # False

'123'.isdecimal()            # True
'一二三'.isdecimal()          # False
'一二三'.isnumeric()          # True

在字符串中,有几种比较常见的判断方法,分别是:

  • string.isalnum() -> 判断字符串中是否全部为数字或者英文
  • string.isalpha() -> 判断字符串中是否全部为纯英文字符
  • string.isdigit() -> 判断字符串中是否全部为整数
  • string.isidentifire() -> 判断字符串是不是一个合法的标识符
  • string.isupper() -> 判断字符串中是否全是大写字母
  • string.islower() -> 判断字符串中是否全是小写字母
  • string.isdecimal() -> 判断是否是十进制数字
  • string.isnumeric() -> 判断是否是可做标记用的数字,包含数字、分数、特殊标记字符和中文,但不包含英文
  • 判断范围:string.isnumeric() > string.isdigit() > string.isdecimal()
Tips 标识符的规则:
  • 必须以字母或下划线开始
  • 不能与保留字相同
  • 避免与Python中已有的标识符相同

替换 -> string.replace()

name = 'Louis Drink'
name.replace('Drink', 'Lu', 1)    # 'Louis Lu'

使用string.replace()方法的时候,需要传三个参数,他们依次分别是:

  • 第一个参数:old_value,就是字符串中现有的要替换的内容
  • 第二个参数:new_value,就是要将现有内容替换掉的内容
  • 第三个参数:count,就是要替换的个数

如上述例子中,我们要把现有的'Drink'替换成'Lu',替换的个数为1。

Tips:最后的count可不填,如果不填写数量的话,默认替换掉字符串中所有的old_value。

拆分 -> string.split()

mail = 'louisdrink@163.com'
mail.split('@')    #['louisdrink', '163.com']

使用string.split()方法的时候,会先去判断该字符串里面有没有我们要拆分的字符。

如果有的话,会返回一个列表,里面包含两个字符串,分别是我们要拆分的字符之前的字符串和之后的字符串,但不包含我们要拆分的字符。

如果没有的话,仍然会返回一个列表,但是列表里只有一个元素,那就是我们原本要进行拆分的字符串。

另外,还有个方法是换行拆分:string.splitlines()。用途是,如果该字符串里有换行符的话,会按换行符前后自动拆分成一个个元素,然后组成一个列表。如果没有换行符,仍然返回一个元素的列表。

连接列表 ->string.join()

singers = ['周杰伦', '林俊杰', '陈奕迅', '李宗盛', '薛之谦']
'--'.join(singers)    # '周杰伦--林俊杰--陈奕迅--李宗盛--薛之谦'

使用string.join()来连接字符串列表,会将字符串、元组、列表中的元素以指定的字符(分隔符)连接成一个新的字符串。

去除空格或指定字符 -> string.strip()

name = '    Louis Drink    '
name.strip()    # 'Louis Drink'
name.lstrip()    # 'Louis Drink    '
name.rstrip()    # '    Louis Drink'

name = 'Louis Drink'
name.lstrip('L')    # 'ouis Drink'
name.rstrip('k')    # 'Louis Drin'

使用string.strip系列方法,需要注意一下几个点:

  • string.strip()系列方法,可填要删除的字符串,如果不填字符串,则默认删除空格
  • string.strip()为删除两边开始的指定字符串
  • string.lstrip()为删除左边开始的指定字符串
  • string.rstrip()为删除右边开始的指定字符串
  • 如果指定字符串在句子中间,则不会被删除
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容

  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,053评论 0 7
  • 就业竞争压力好大 随着社会经济水平的发展,我国教育普及率提高,人们对于教育的重要性的认知水平提升,越来越多的家长让...
    Janets阅读 153评论 0 0
  • 今天下午奶奶开车送我和妹妹到学校去领家庭报告书,回到教室老师发回报告书之后老师就发试卷下来说谁的分数高,谁的分数少...
    曹捷捷阅读 162评论 0 1
  • 2018-02-01学习心得分享: 《大易教育》的“大易”,就是大大的容易,凡事越是简单越容易学习;越是简...
    泉州炜圣妈阅读 212评论 0 0
  • 本文主要讲解使用keras时关于学习率衰减的实现,目前是国外大牛的一篇文章,英文的,先消化,后续有时间在进行翻译。...
    nightwish夜愿阅读 1,008评论 1 0