首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Python语法学习记录(13):字符串

  • 25-03-03 18:03
  • 2763
  • 13590
blog.csdn.net

文章目录

  • 1、字符串简介:
  • 2、字符串的操作:
    • 2.1 字符串的赋值定义、子字符串
      • 字符串的赋值与定义:
      • 子字符串的提取:
    • 2.2 字符串运算符
    • 2.3 字符串的内置函数:
    • 2.4 字符串的转换:
    • 2.5 字符串的分割与拼接:
    • 2.6 字符串查找、替换、索引、计数:
      • 字符映射表:
    • 2.7 字符串的大小写和部分字符处理:
    • 2.8 字符串的编码解码:
    • 2.9 判断字符串的某种情况:
  • 3、字符串格式化
    • 3.1 python字符串格式化符号:
    • 3.2 格式化操作符辅助指令:
  • 4、字符串常量
  • 5、转义字符
  • 6、字符串模板Template
  • 7、常用字符串技巧
    • 7.1 反转字符串
    • 7.2 关于字符串链接
    • 7.3 固定长度分割字符串
    • 7.4 使用()括号生成字符串
    • 7.5 将print的字符串写到文件

1、字符串简介:

字符串(即不能修改的字符list)字符串是一个整体。如果你想直接修改字符串的某一部分,是不可能的。但我们能够读出字符串的某一部分。进行子字符串的提取。

2、字符串的操作:

2.1 字符串的赋值定义、子字符串

字符串的赋值与定义:

string_test = "Hello My Friend"
  • 1

子字符串的提取:

可以使用方括号来截取字符串

string_test = "Hello My Friend"
srring_test_sub = string_test[:6]
  • 1
  • 2

2.2 字符串运算符

下表实例变量a值为字符串 “Hello”,b变量值为 “Python”:

操作符描述实例
+字符串连接a + b 输出结果: HelloPython
*重复输出字符串a*2 输出结果:HelloHello
[]通过索引获取字符串中字符a[1] 输出结果 e
[ : ]截取字符串中的一部分,遵循左闭右开原则,str[0,2] 是不包含第 3 个字符的。a[1:4] 输出结果 ell
in成员运算符 - 如果字符串中包含给定的字符返回 True’H’ in a 输出结果 True
not in成员运算符 - 如果字符串中不包含给定的字符返回 True’M’ not in a 输出结果 True
r/R原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。print( r'\n' ) print( R'\n' )
%格式字符串请看下一节内容。

2.3 字符串的内置函数:

len(string) # 返回字符串长度
max(str)#返回字符串 str 中最大的字母
min(str)#返回字符串 str 中最小的字母
cmp(“my friend”, str) #字符串比较。第一个大,返回1
  • 1
  • 2
  • 3
  • 4

2.4 字符串的转换:

oat(str) #变成浮点数,float(“1e-1″) 结果为0.1
int(str) #变成整型, int(“12″) 结果为12
int(str,base) #变成base进制整型数,int(“11″,2) 结果为2
long(str) #变成长整型,
long(str,base) #变成base进制长整型
  • 1
  • 2
  • 3
  • 4
  • 5

2.5 字符串的分割与拼接:

分割:

str.partition(s) # 用s将str切分成三个值
str.split(s[, num]) # 以s为分隔符切片str num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
str.splitlines([keepends]) # 按照行分隔,返回一个包含各行作为元素的列表.按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
str.rpartition(s) # 类似于 partition()函数,不过是从右边开始查找
  • 1
  • 2
  • 3
  • 4

拼接:

join(seq) # 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))
# r-u-n-o-o-b
# runoob
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.6 字符串查找、替换、索引、计数:

str.replace(a, b[,max]) # 将字符串str中的a替换成b  次数不超过max次数
str.count(s) # 返回字符串s在str中出现的次数
str.find(s) # 返回字符串s在字符串str中的位置索引,没有则返回-1  
str.rfind(s) # 类似于 find()函数,不过是从右边开始查找
str.index(s) # 和find()方法一样,但是如果s不存在于str中则会抛出异常
str.rindex(s) # 类似于 index(),不过是从右边开始
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

字符映射表:

str.maketrans(intab, outtab)
str.translate(table)
bytes.translate(table[, delete])    
bytearray.translate(table[, delete]) 
  • 1
  • 2
  • 3
  • 4

例子:

intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)   # 制作翻译表
 
str = "this is string example....wow!!!"
print (str.translate(trantab))
# 输出 th3s 3s str3ng 2x1mpl2....w4w!!!

# 制作翻译表
bytes_tabtrans = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
# 转换为大写,并删除字母o
print(b'runoob'.translate(bytes_tabtrans, b'o'))
# 输出 b'RUNB'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.7 字符串的大小写和部分字符处理:

str.capitalize() # 把字符串的首字母大写
str.lower() # 转换str中所有大写字符为小写
str.strip() # 等于同时执行rstrip()和lstrip()  
str.title() # 返回”标题化”的str,所有单词都是以大写开始,其余字母均为小写
str.upper() # 返回str所有字符为大写的字符串
str.center(width) # 将原字符串用空格填充成一个长度为width的字符串,原字符串内容居中
str.ljust(width) # 返回一个原字符串左对齐的并使用空格填充至长度width的新字符串
str.lstrip() # 去掉str左边的不可见字符
str.rstrip() # 去掉str右边的不可见字符
str.swapcase() # 将字符串中大写转换为小写,小写转换为大写
str.zfill(width) # 返回长度为 width 的字符串,原字符串str右对齐,前面填充0
str.rjust(width) # 返回一个原字符串右对齐的并使用空格填充至长度width的新字符串
expandtabs(tabsize=8) # 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是8 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.8 字符串的编码解码:

str.decode(encoding=’UTF-8’,errors=’strict’) # 以指定编码格式解码字符串  
str.encode(encoding=’UTF-8’,errors=’strict’) # 以指定编码格式编码字符串
bytes.decode(encoding="utf-8", errors="strict") # Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。
  • 1
  • 2
  • 3

2.9 判断字符串的某种情况:

str.endswith(s) # 判断字符串str是否以字符串s结尾
str.isalnum() # 如果str至少有一个字符并且都是字母或数字则返回True,否则返回False  
str.isalpha() # 如果str至少有一个字符并且都是字母则返回True,否则返回False  
str.isdigit() # 如果str只包含数字则返回 True 否则返回 False  
str.isdecimal() # 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false
str.islower() # 如果str存在区分大小写的字符,并且都是小写则返回True 否则返回False  
str.isspace() # 如果str中只包含空格,则返回 True,否则返回 False  
str.istitle() # 如果str是标题化的(单词首字母大写)则返回True,否则返回False  
str.isupper() # 如果str存在区分大小写的字符,并且都是大写则返回True 否则返回False
str.startswith(s) # 检查字符串str是否是以s开头,是则返回True,否则返回False
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3、字符串格式化

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
# 输出 我叫 小明 今年 10 岁!
  • 1
  • 2

3.1 python字符串格式化符号:

符 号描述
%c格式化字符及其ASCII码
%s格式化字符串
%d格式化整数
%u格式化无符号整型
%o格式化无符号八进制数
%x格式化无符号十六进制数
%X格式化无符号十六进制数(大写)
%f格式化浮点数字,可指定小数点后的精度
%e用科学计数法格式化浮点数
%E作用同%e,用科学计数法格式化浮点数
%g%f和%e的简写
%G%f 和 %E 的简写
%p用十六进制数格式化变量的地址

3.2 格式化操作符辅助指令:

符号功能
*定义宽度或者小数点精度
-用做左对齐
+在正数前面显示加号( + )
在正数前面显示空格
#在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
0显示的数字前面填充’0’而不是默认的空格
%‘%%‘输出一个单一的’%’
(var)映射变量(字典参数)
m.n.m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

4、字符串常量

需要import string

常数含义
string.ascii_lowercase小写字母’abcdefghijklmnopqrstuvwxyz’
string.ascii_uppercase大写的字母’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
string.ascii_lettersascii_lowercase和ascii_uppercase常量的连接串
string.digits数字0到9的字符串:’0123456789’
string.hexdigits字符串’0123456789abcdefABCDEF’
string.letters字符串’abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
string.lowercase小写字母的字符串’abcdefghijklmnopqrstuvwxyz’
string.octdigits字符串’01234567’
string.punctuation所有标点字符
string.printable可打印的字符的字符串。包含数字、字母、标点符号和空格
string.uppercase大学字母的字符串’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
string.whitespace空白字符 ‘\t\n\x0b\x0c\r ‘

5、转义字符

在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表:

转义字符描述
(在行尾时)续行符
\反斜杠符号
’单引号
"双引号
\a响铃
\b退格(Backspace)
\e转义
\000空
\n换行
\v纵向制表符
\t横向制表符
\r回车
\f换页
\oyy八进制数,yy代表的字符,例如:\o12代表换行
\xyy十六进制数,yy代表的字符,例如:\x0a代表换行
\other其它的字符以普通格式输出

6、字符串模板Template

通过string.Template可以为Python定制字符串的替换标准,下面是具体列子:

from string import Template
s = Template('$who like $what')
print(s.substitute(who='i', what='python'))
# 输出 i like python
print(s.safe_substitute(who='i')) # 缺少key时不会抛错
# 输出 i like $what
print(Template('${who}LikePython').substitute(who='I')) # 在字符串内时使用{}
# 输出 ILikePython
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Template还有更加高级的用法,可以通过继承string.Template, 重写变量delimiter(定界符)和idpattern(替换格式), 定制不同形式的模板。

import string
template_text = '''
    Delimiter : $de
    Replaced : %with_underscore
    Ingored : %notunderscored
'''
d = {'de': 'not replaced',
     'with_underscore': 'replaced',
     'notunderscored': 'not replaced'}
class MyTemplate(string.Template):
    # 重写模板 定界符(delimiter)为"%", 替换模式(idpattern)必须包含下划线(_)
    delimiter = '%'
    idpattern = '[a-z]+_[a-z]+'

print(string.Template(template_text).safe_substitute(d))  # 采用原来的Template渲染
print(MyTemplate(template_text).safe_substitute(d))  # 使用重写后的MyTemplate渲染
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

输出:

    Delimiter : not replaced
    Replaced : %with_underscore
    Ingored : %notunderscored
    
    Delimiter : $de
    Replaced : replaced
    Ingored : %notunderscored
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

原生的Template只会渲染界定符为$的情况,重写后的MyTemplate会渲染界定符为%且替换格式带有下划线的情况。

7、常用字符串技巧

7.1 反转字符串

>>> s = '1234567890'
>>> print s[::-1]
0987654321
  • 1
  • 2
  • 3

7.2 关于字符串链接

尽量使用join()链接字符串,因为’+’号连接n个字符串需要申请n-1次内存,使用join()需要申请1次内存。

7.3 固定长度分割字符串

>>> import re
>>> s = '1234567890'
>>> re.findall(r'.{1,3}', s)  # 已三个长度分割字符串
['123', '456', '789', '0']
  • 1
  • 2
  • 3
  • 4

7.4 使用()括号生成字符串

sql = ('SELECT count() FROM table '
       'WHERE id = "10" '
       'GROUP BY sex')

print sql

SELECT count() FROM table WHERE id = "10" GROUP BY sex
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

7.5 将print的字符串写到文件

>>> print >> open("somefile.txt", "w+"), "Hello World"  # Hello World将写入文件somefile.txt
  • 1
文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树基础语法缩进规则416632 人正在系统学习中
注:本文转载自blog.csdn.net的呆呆象呆呆的文章"https://blog.csdn.net/qq_41554005/article/details/100553523"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top