python基础(字符串相关操作)
来源:互联网 发布:sap软件咨询顾问 编辑:程序博客网 时间:2024/06/07 11:33
字符串是开发应用中常用的数据类型,字符串的处理是实际应用中经常面对的问题。正则表达式专门用于匹配应用中的数据,能够简化字符串的处理程序,python提供了模块匹配正则表达式。
- 字符串的格式化
- 字符串的截取、合并、过滤等操作
- 字符串的查找
- 正则表达式的语法
- python的正则表达式模块
一、字符串的格式化
python将若干值插入带有“%”标记的字符串中,从而可以动态地输出字符串。字符串的格式化语法为:
"%s"%str1"%s %s"%(str1,str2)
第一行代码使用一个值格式化字符串,第二行代码使用多个值格式化字符串,用于替换的值组成一个元组。
#格式化字符串str = "version"num = 1.0format = "%s"%str #用str的值替换字符串中的%sprint(format)format = "%s %d"%(str,num) #用str,num分别替换字符串中的%s,%d的值print(format)
运行结果:
versionversion 1
注意:如果要格式化多个值,元组中元素的顺序必须和格式化字符串中替代符的顺序一致,否则,可能出现类型不匹配的问题,会抛出TypeError异常。
使用%f可以格式化浮点数的精度,根据指定的精度做“四舍五入”
#带精度的格式化print("浮点型数字:%f"%1.25) #以浮点形式打印数字,默认情况下输出小数点后6位数字print("浮点型数字:%1f"%1.25) #精确到小数点后1位print("浮点型数字:%2f"%1.254) #精确到小数点后2位
运行结果:
浮点型数字:1.250000浮点型数字:1.250000浮点型数字:1.254000
python格式化字符串的替代符及其含义
%c 格式化字符及其ASCll码
%u 格式化无符号整型
%o 格式化无符号八进制数
%x 格式化无符号十六制数
%e 用科学计数法格式化浮点数
%g 根据值的大小决定使用%f还是%e
%p 用十六进制数格式化变量的地址
字符串格式化可以使用元素格式化,也可以使用字典格式化多个值。
#使用字典格式化字符串print("%(version)s:%(num).1f"%{"version":"version","num":2})
python 可以实现字符串的对其操作,提供了字符串的对齐函数:
#字符串对齐word = "version 3.0"print(word.center(20)) #字符串居中,word两侧个输出5个空格,总共占20个字符print(word.center(20,"*")) #字符串居中,word两侧个输出5个*,总共占20个字符print(word.ljust(0)) #字符串左对齐print(word.rjust(20)) #字符串右对齐,参数20表示一共输出20个字符,"version3.0"占10个字符,左边填充10个空格print("%30s"%word) #表示先输出30个空格,再输出变量word
python中提供了strip(),lstrip(),rstrip()函数去掉字符串中的转义符:
path = "\thello word\n"print(path)print("strip:",path.strip()) #去除字符串的所有转义字符print("lstrip:",path.lstrip()) #去除字符串左边的转义字符print("rstrip:",path.rstrip()) #去除字符串右边的转义字符
运行结果:
hello wordstrip: hello wordlstrip: hello wordrstrip: hello word
二、字符串的合并
python用“+”连接不同的字符串,python会根据“+”两侧变量的类型,决定执行连接操作或加法操作。如果两侧都是字符串,则执行连接操作,如果两侧都是数字,则执行加法操作,如果两侧是不同的类型,则抛出TypeError异常。
str1 = "hello "str2 = "world "str3 = "hello "str4 = "china "result = str1 + str2 + str3 #把str1,str2,str3的值连接起来,并把结果存放在result中print(result)result = result + str4print(result)
python提供join()连接字符串,join()配合列表实现多个字符串的连接。
#join()函数实现列表元素的连接list = ["hello ","world ","hello ","china "]result = ''.join(list)print(result)
join()函数,每次连接列表中的一个元素。
也可以利用reduce()函数进行字符串的累计连接:
#使用reduce()函数实现字符串连接from functools import reduceimport operator #导入operator模块,利用add()函数实现累计连接str = ["hello ","world ","hello ","china "]print(reduce(operator.add,str,"")) #利用reduce()函数实现对空字符串的累计操作
运行结果:
hello world hello china
三、字符串的截取
字符串的截取是实际应用中经常使用的技术,被截取的部分成为子串,python内置了序列,可以通过索引、切片获取子串,也可以使用split()来获取。字符串也属于序列。
通过切片可以实现对字符串有规律的截取,切片的语法如下:
string[start:end:step]
其中string表示需要取子串的源字符串变量,[stsrt:end:step]表示从string的第start个索引位置开始到第end个索引之间截取子串,截取的步长是step。
str1 = "hello world"print(str1[0:3]) #截取字符串中从第一个字符串到 第三个字符串之间的部分,不包含第三个字符串print(str1[::2]) #切片省略了开始和结束字符,从字符串的第一个字符开始,以2位步长逐个截取字符print(str1[1::2]) #切片中的数字1表示从字符串的第2个字符开始取字符,数字2表示以2位步长逐个截取字符
运行结果:
D:\Python36\python.exe E:/demo_py/python/char_6/str_split.pyhelhlowrdel ol
如果要同时截取多个子串,可以使用函数split()函数实现:
split([char] [,num])
参数char表示用于分割的字符,默认的分隔符是空格,参数num表示分割次数,如果num=2,将把源字符串分割为3个子串,默认情况下,将根据字符char在字符串中出现的个数来分割子串。函数的返回值是由子串组成的列表。
sentence = "bob said :1, 2, 3, 4"print("以空格分割:",sentence.split())print("以逗号分割:",sentence.split(','))print("以逗号分割,分割次数为2次:",sentence.split(',',2))
运行结果:
以空格分割: ['bob', 'said', ':1,', '2,', '3,', '4']以逗号分割: ['bob said :1', ' 2', ' 3', ' 4']以逗号分割,分割次数为2次: ['bob said :1', ' 2', ' 3, 4']
四、字符串的比较
python直接使用“==”“!=”操作符比较两个字符串的内容,如果比较的两个变量的类型不相同,比较的内容也不相同。
str_1 = 1str_2 = "1"if(str_1==str_2): print("两字符串相同")else: print("两字符串不同")if(str(str_1)==str_2 ): #将数字1转换为字符类型与str_2比较则相同 print("两字符串相同")else: print("两字符串不同")
运行结果:
D:\Python36\python.exe E:/demo_py/python/char_6/str_cmp.py两字符串不同两字符串相同
如果要比较字符串中的一部分内容,可以现截取子串,在使用“==”操作符进行比较,如果要比较字符串的开头或结尾部分,更方便的是startswith()或ends()函数
startswith(substring,[,start[,end]])
参数substring是与源字符串开头部分比较的子串,参数start表示开始比较的位置,参数end表示比较结束的位置,如果字符串以substring开头,则返回True,否则,返回False.
word = "hello world"print("hello"==word[0:5])print(word.startswith("hello"))print(word.endswith("ld",6))print(word.endswith("ld",6,10))print(word.endswith("ld",6,len(word)))
运行结果:
D:\Python36\python.exe E:/demo_py/python/char_6/startswith_endswith.pyTrueTrueTrueFalseTrue
五、字符串的反转
python没有提供对字符串进行反转的函数,但是可以使用列表和字符串索引来实现字符串的反转,并通过range()函数进行循环:
def reverse(s): out = "" l = list(s) for i in range(len(l),0,-1): out +=''.join(l[i-1]) print(out)reverse("hellowprld")
运行结果:
D:\Python36\python.exe E:/demo_py/python/char_6/str_reverse.pydlrpwolleh
实现字符串反转的另一种简洁方法:
def reverse(s): return s[::-1]print(reverse("helloporld"))
运行结果:
D:\Python36\python.exe E:/demo_py/python/char_6/str_reverse.pydlropolleh
六、字符串的查找和替换
find(substring[,start[,end]])
str = "this is a apple"print(str.find("a"))print(str.rfind("a"))
运行结果:
D:\Python36\python.exe E:/demo_py/python/char_6/str_find.py810
字符串的替换:
replace(old,new[,max])
参数old表示将被替换掉的字符串,参数new表示替换old的字符串,参数max表示使用new替换old的次数,函数返回一个新的字符串,如果子串old不在源字符串中,则函数返回源字符串的值。
str = "hello world,hello china"print(str.replace("hello","hi"))print(str.replace("hello","hi",1))print(str.replace("hello","hi",2))
运行结果:
hi world,hi chinahi world,hello chinahi world,hi china
注意:replace()函数先创建变量str的拷贝,然后再拷贝中替换字符串,并不会改变变量str的内容。
七、字符串与日期的转换
在开发中,经常把日期类型转化为字符串类型使用,python中提供了time模块处理日期和时间,函数strftime()可以实现时间到字符串的转换:
strftime(format[,tuple])
import time,datetime#时间到字符串的转换print(time.strftime("%Y-%m-%d %X",time.localtime()))#字符串到时间的转换t = time.strptime('2008-08-08',"%Y-%m-%d")y,m,d = t[0:3]print(datetime.datetime(y,m,d))
运行结果:
D:\Python36\python.exe E:/demo_py/python/char_6/str_time.py2017-11-17 01:00:222008-08-08 00:00:00
- python基础(字符串相关操作)
- Python字符串相关操作
- Python 字符串操作基础
- Python 基础操作列表、字符串
- [JNI] 开发基础(6)字符串相关操作
- Python基础(四)-列表的相关操作
- python基础(五)--文件的相关操作
- Python基础练习——字符串相关
- 文件/字符串操作相关的python程序
- python中md5和字符串相关操作
- Python字符串和字典相关操作
- Python 字符串类型及相关操作
- python字符串、字符串处理函数及字符串相关操作
- python基础(三)字符串的常见操作
- python基础(二)关于编码和字符串操作etc
- 重温python基础7:字符串操作
- python基础-04-字符串高级操作
- python基础 字符串(上)
- ACM中关于Output Limit Exceeded和Time Limit Exceeded
- LINUX技巧-行首/行尾加入字符
- HTTP的请求过程
- 谷歌浏览器中离线安装.crx扩展名的Chrome插件
- LINUX技巧-查找路径下文件中含有某字符串的文件及其路径
- python基础(字符串相关操作)
- LINUX技巧-查找文件行中值重复的行
- java线程安全之volatale的非原子性(七)
- Java 的布局管理器GridBagLayout的使用方法【图文说明】
- gitlab ee 权限清单
- 简单常用的小代码——猜数字游戏
- django环境安装
- error: failed to push some refs to【问题解决】
- 洛谷p1865区间筛素数