python字符串详解

python字符串详解

字符串

字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1a2···an”(n>=0)。它是编程语言中表示文本的数据类型。 通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。
属于python基本数据类型和结构的一种。2 本身是不可变的数据类型。 3 有很多内置的方法
字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。

var1 = 'Hello World!'
var2 = "I love Python "

字符串基本操作

1.Python访问字符串中的值

索引和切片
Python不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
Python访问子字符串,可以使用方括号来截取字符串.,当方括号中有三个参数,第三个代表步长(间隔)。

print ("var1[0]: ", , var1[0])
print ("var2[1:5]: ",, var2[1:5])
a ='123456789'
a[0:9:3]#从零到九,间隔三个取一个形成新的字符串。
# var1[0]: H
# love

下面这个代码是针对上面切片和索引归纳的几个实例

str = 'Hello World!'

print (str) # 输出完整字符串
print (str[0] )# 输出字符串中的第一个字符
print (str[2:5]) # 输出字符串中第三个至第五个之间的字符串,操作:  str[star:end:sep]
print (str[2:] )# 输出从第三个字符开始的字符串
print (str * 2) # 输出字符串两次
print( str + "TEST" )# 输出连接的字符串

2.你可以对已存在的字符串进行修改,并赋值给另一个变量

var1 = 'Hello World!'
print( "更新字符串 :- ", var1[:6] + 'Runoob!')
## 运行结果:更新字符串 :-  Hello Runoob!

3.Python字符串格式化和原始字符串

  • Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
    在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。
print ("My name is %s and weight is %d kg!" % ('Zara', 21))  # 注意双引号后还要加一个%
## 运行结果My name is Zara and weight is 21 kg!
  • python字符串格式化符号:
   符 号         描述
  %c     格式化字符及其ASCII码
  %s     格式化字符串
  %d     格式化整数
  %u     格式化无符号整型
  %o     格式化无符号八进制数
  %x     格式化无符号十六进制数
  %X     格式化无符号十六进制数(大写)
  %f     格式化浮点数字,可指定小数点后的精度
  %e     用科学计数法格式化浮点数
  %E     作用同%e,用科学计数法格式化浮点数
  %g     %f和%e的简写
  %G     %f 和 %E 的简写
  %p     用十六进制数格式化变量的地址
  • Python转义字符:
 转义字符        描述
\(在行尾时) 续行符
\\          反斜杠符号
\'          单引号
\"          双引号
\a          响铃
\b          退格(Backspace)
\e          转义
\000        空
\n          换行
\v          纵向制表符
\t          横向制表符
\r          回车
\f          换页
\oyy        八进制数,yy代表的字符,例如:\o12代表换行
\xyy        十六进制数,yy代表的字符,例如:\x0a代表换行
\other      其它的字符以普通格式输出
  • python 中的原始字符串
    原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。
    在Python中为了使反斜杠和元字符取消字符的特殊功能,需要在字符前添加反斜杠。
    解决的办法就是为正则表达式使用 python 的 raw 字符串表示;在字符串前加个 “r” 反斜杠就不会被任何特殊方式处理,所以 r”\n” 就是包含”\” 和 “n” 的两个字符,而 “\n” 则是一个字符,表示一个换行。正则表达式通常在 Python 代码中都是用这种 raw 字符串表示。
    原始字符串除在字符串的第一个引号前加上字母“r”(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
>>> '\n'
'\n'
>>> print( '\n')
>>> r'\n'
'\\n'
>>> print (r'\n')
\n

使用原始字符串,可以让我们减少错误。
如下例子中,打开readme.txt时出现异常,就是因为’\r’和’\t’被当成不在我们的文件名中的特殊字符。这个在读取文件路径很有用。

>>> f = open("D:\windows\temp\readme.txt",'r')
 
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    f = open("D:\windows\temp\readme.txt",'r')
IOError: [Errno 22] invalid mode ('r') or filename: 'D:\\windows\temp\readme.txt'

4.字符串连接

+直接连接字符串,当字符比较多的时候,效率是比较低的。

a = ['a','b','c','d']
content = ''
for i in a:
   content = content + i 
print (content)

说下为什么效率会低呢?
原因:在循环连接字符串的时候,他每次连接一次,就要重新开辟空间,然后把字符串连接起来,再放入新的空间,再一次循环,又要开辟新的空间,把字符串连接起来放入新的空间,如此反复,内存操作比较频繁,每次都要计算内存空间,然后开辟内存空间,再释放内存空间,效率非常低,你也许操作比较少的数据的时候看不出来,感觉影响不大,但是你碰到操作数据量比较多的时候,这个方法就要退休了。

  • 方法1: 用字符串的join方法
a = ['a','b','c','d']
content = ''
content = ''.join(a)
print (content)
  • 用字符串的替换占位符替换
    这里不详细介绍,有兴趣可以看字符串拼接的相关知识。

5.字符串替换

字符串替换可以用内置的方法和正则表达式完成。
1)用字符串本身的replace方法:
2)用正则表达式来完成替换:

a = 'hello word'
#我把a字符串里的word替换为python
#用字符串本身的replace方法
a.replace('word','python')
#用正则表达式来完成替换:
import re 用正则表达式
strinfo = re.compile('word')
b = strinfo.sub('python',a)

6.字符串比较

cmp方法比较两个对象,并根据结果返回一个整数。cmp(x,y)如果X< Y,返回值是负数 如果X>Y 返回的值为正数。

7.字符串查找

python 字符串查找有4个方法,1 find,2 index方法,3 rfind方法,4 rindex方法。
1 find()方法:
2 index()方法:
python 的index方法是在字符串里查找子串第一次出现的位置,类似字符串的find方法,不过比find方法更好的是,如果查找不到子串,会抛出异常,而不是返回-1

8.字符串分割

字符串分割,可以用split,rsplit方法,通过相应的规则来切割成生成列表对象。

9.字符串翻转

通过步进反转[::-1]

a ='hello'
b = a[::-1]

10.字符串编码

通过字符串的decode和encode方法
encode([encoding,[errors]])
其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默认值为"strict",意思是UnicodeError。可能的值还有’ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 和所有的通过codecs.register_error注册的值。

11.字符串长度

通过内置方法len()来计算字符串的长度,注意这个计算的是字符的长度。

a ='hello'
len(a)#5

字符串函数操作

1.字符串大小写

通过下面的upper(),lower()等方法来转换大小写
S.upper()#S中的字母大写
S.lower() #S中的字母小写
S.capitalize() #首字母大写
S.istitle() #S是否是首字母大写的
S.isupper() #S中的字母是否便是大写
S.islower() #S中的字母是否全是小写

2.字符串去空格

通过strip(),lstrip(),rstrip()方法去除字符串的空格

S.strip()去掉字符串的左右空格
S.lstrip()去掉字符串的左边空格
S.rstrip()去掉字符串的右边空格

3.字符串常用函数总结

string = '2121ddqweq'

# 把字符串的第一个字符大写
string.capitalize()  

#返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string.center(width)    

#返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数  
string.count(str, beg=0, end=len(string))  

#以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 ,
#除 非 errors 指 定 的 是 'ignore' 或 者'replace'   
string.decode(encoding='UTF-8', errors='strict')

#以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,
#除非 errors 指定的是'ignore'或者'replace'  
string.encode(encoding='UTF-8', errors='strict')

#检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,
#返回 True,否则返回 False.    
string.endswith(obj, beg=0, end=len(string))

#把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
string.expandtabs(tabsize=8)

#检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,
#如果是返回开始的索引值,否则返回-1
string.find(str, beg=0, end=len(string))

#跟find()方法一样,检测 str 是否包含在 string 中,只不过如果str不在 string中会报一个异常.
string.index(str, beg=0, end=len(string))

#如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
string.isalnum()

#如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
string.isalpha()

#如果 string 只包含十进制数字则返回 True 否则返回 False.
string.isdecimal()

#如果 string 只包含数字则返回 True 否则返回 False.
string.isdigit()

#如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,
#则返回 True,否则返回 False
string.islower()

#如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isnumeric()

#如果 string 中只包含空格,则返回 True,否则返回 False.
string.isspace()

#如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.istitle()

#如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,
#则返回 True,否则返回 False
string.isupper()

#以 string 作为分隔符,将 seq(元素序列)中所有的元素合并为一个新的字符串
string.join(seq)

#返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.ljust(width)

#转换 string 中所有大写字符为小写.
string.lower()

#截掉 string 左边的空格
string.lstrip()

#maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,
#表示需要转换的字符,第二个参数也是字符串表示转换的目标。
string.maketrans(intab, outtab])

#返回字符串 str 中最大的字母。
max(str)

#返回字符串 str 中最小的字母。
min(str)

#有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成
# 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中
#不包含str 则 string_pre_str == string.
string.partition(str)

#把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.replace(str1, str2,  num=string.count(str1))

#类似于 find()函数,不过是从右边开始查找.
string.rfind(str, beg=0,end=len(string) )

#类似于 index(),不过是从右边开始.
string.rindex( str, beg=0,end=len(string))

#返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.rjust(width)

#类似于 partition()函数,不过是从右边开始查找.
string.rpartition(str)

#删除 string 字符串末尾的空格.
string.rstrip()

#以 str 为分隔符切片 string为字符串列表,如果 num有指定值,则仅分隔 num 个子字符串
string.split(str="", num=string.count(str))

#按照行分隔,返回一个包含各行作为元素的列表,如果 num 指定则仅切片 num 个行.
string.splitlines(num=string.count('\n'))

#检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,
#则在指定范围内检查.
string.startswith(obj, beg=0,end=len(string))

#在 string 上执行 lstrip()和 rstrip()
string.strip([obj])

#翻转 string 中的大小写
string.swapcase()

#返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
string.title()

#根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中
string.translate(str, del="")

#转换 string 中的小写字母为大写
string.upper()

#返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0
string.zfill(width)

#检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。
string.isdecimal()

上面的函数参考了几篇博主的文章,大家有兴趣可以去这个几个博客上面看一下。
Python 字符串详解1
python 字符串详解2

发布了41 篇原创文章 · 获赞 88 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章