零基础入门学习Python(14)--字符串:各种奇葩的内置方法
前言
这节课我们回过头来,再谈一下字符串,或许我们现在再来谈字符串,有些朋友可能觉得没必要了,甚至有些朋友就会觉得,不就是字符串吗,哥闭着眼也能写出来,那其实关于字符串还有很多你不知道的秘密哦。由于字符串在日常生活中是如此的常见,因此小甲鱼抱着负责任的态度,在这节课上,把所有知道的东西都倒出来跟大家分享下。
无论说你是之前学过了也好,再怎么熟悉也好,因为我们字符串有非常多的方法,而且很多方法都是比较奇葩的,而且这些方法在Python2.x 与Python3.x中都略有差别。,所以大家可以把这节课当作一次复习。
我们学习的列表和元组,都支持分片操作,事实上我们的字符串也是支持的,例如:
>>> str1 = 'i love fishc.com'
>>>
>>> str1[:6]
'i love'
下面谈一下python各种奇葩的字符串内置方法:
知识点
方法 | 定义 | 举例 |
---|---|---|
capitalize() | 把字符串的第一个字符改为大写 | >>> str2 = 'xiaoxie' str2.capitalize() 'Xiaoxie' |
casefold() | 把整个字符串的所有字符都改为小写 | >>> str2 = 'XiAoXie' >>> str2.casefold() 'xiaoxie' |
center(width) | 将字符串居中,并使用空格填充至长度width的新字符串 | >>> str2 = 'ju Zhong' >>> str2.center(18) ' ju Zhong ' |
ljust(width) | 返回一个左对齐的字符串,并使用空格填充至长度为width的新字符串 | >>> str2 = '小鲫鱼' >>> str2.ljust(5) '小鲫鱼 ' |
rjust(width) | 返回一个右对齐的字符串,并使用空格填充至长度为width的新字符串。 | >>> str2 = 'kongge' >>> str2.rjust(10) ' kongge' |
zfill(width) | 返回长度为width的字符串,原字符串右对齐,前边用0填充。 | >>> str2 = 'fsfas12123sfsfsfsf' >>> str2.zfill(5) 'fsfas12123sfsfsfsf' >>> str2.zfill(50) '00000000000000000000000000000000fsfas12123sfsfsfsf' |
count(sub[,start[,end]]) | 返回sub在字符串里出现的次数,start和end参数表示范围,可选。 | >>> str2 = 'fswfff' >>> str2.count('f') 4 >>> str2.count('f',3,5) 2 |
encode(encoding=’utf8’,errors=’strict’) | 以encoding指定的编码格式对字符串进行编码。 encoding – 要使用的编码,如”UTF-8”。 errors – 设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeError。 其他可能得值有 ‘ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过 codecs.register_error() 注册的任何值。 |
>>> str ='编码' >>> str_utf8 = str.encode('UTF8') >>> str_gbk = str.encode('GBK') >>> print(str) 编码 >>> print(str_utf8) b'\xe7\xbc\x96\xe7\xa0\x81' >>> print(str_gbk) b'\xb1\xe0\xc2\xeb' >>> print(str_utf8.decode('utf8')) 编码 >>> print(str_gbk.decode('gbk')) 编码 |
endswith(sub[,start[,end]]) | 检查字符串是否以sub字符串结束,如果是返回True,否则返回False。start和end参数表示范围,可选。 | >>> str2 = '我爱你我' >>> str2.endswith('我') True >>> str2.endswith('我',1,3) False >>> str2.endswith('我',1,4) True |
expandtabs([tabsize=8]) | 把字符串中的tab符号(\t)转换为空格,如不指定参数,默认的空格数是tabsize=8 | >>> str2 = 'geck f' >>> str2.expandtabs() 'geck f' >>> temp = len(str2.expandtabs()) >>> temp 9 >>> len(str2) 6 >>> str2.expandtabs(40) 'geck f' >>> len(str2.expandtabs(40)) 41 |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回False | >>> str2 = 'fsfs' >>> str2.isalpha() True |
isalnum() | 如果字符串至少有一个字符并且所有字符都是字幕或数字则返回True,否则返回False。 | `>>> str2 = 'fsaa' >>> str2.isalnum() True >>> str2 = 'fs1' >>> str2.isalnum() True >>> str2 = '1.3' >>> str2.isalnum() False >>> str2 = ' ' >>> str2.isalnum() False >>> str2 = '+' >>> str2.isalnum() False |
isdecimal() | 如果字符串只包含十进制数据则返回True,否则返回False | >>> str2 = '123456' >>> str2.isdecimal() True >>> str2 = '123456f' >>> str2.isdecimal() False >>> str2 = '123.456' >>> str2.isdecimal() False |
isdigit() | 如果字符串只包含数字则返回True,否则返回False。 | >>> str2 = '111111' >>> str2.isdigit() True |
isnumeric() | 如果字符串中只包含数字字符,则返回True,否则返回False。 | >>> str2 = '13Ⅳ' >>> str2.isnumeric() True >>> str2 = '四' >>> str2.isnumeric() True |
islower() | 如果字符串至少包含一个区分大小写的字符,并且这些字符都是小写,则返回True,否则返回False。 | >>> str2 = '12fsfs' >>> str2.islower() True |
isupper() | 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回True,否则返回False。 | >>> str2 = '1F' >>> str2.isupper() True >>> str2 = '1Fs' >>> str2.isupper() False |
lower() | 转换字符串中所有大写字符为小写 | >>> str2 = 'FFSA小甲鱼11' >>> str2.lower() 'ffsa小甲鱼11' |
upper() | 转换字符串中的所有小写字符为大写 | >>> str2 = 'fsfas12123sfsfsfsf' >>> str2.upper() 'FSFAS12123SFSFSFSF' |
swapcase() | 翻转字符串中的大小写 | >>> str2 = 'fISH lOVE' >>> str2.swapcase() 'Fish Love' |
lstrip() | 去掉字符串左边的所有空格。 | >>> str2 = ' f s fs' >>> str2.lstrip() 'f s fs' |
rstrip() | 删除字符串末尾的空格。 | >>> str2 = ' fsfs ' >>> str2.rstrip() ' fsfs' |
strip([chars]) | 删除字符串前边和后边所有的空格,chars参数可以定制删除的字符,可选。 | >>> str2 = ' w a n b x i n' >>> str2.strip() 'w a n b x i n' >>> str2.strip('n') ' w a n b x i ' >>> str2.strip('w') ' w a n b x i n' >>> str2.strip(' w') 'a n b x i n' |
isspace() | 如果字符串中只包含空格,则返回True,否则返回False。 | >>> str2 = 'xiaoxie' >>> str2.xxx >>> str2 = ' ' >>> str2.isspace() True |
title() | 返回标题化(所有单词都是以大写开始,其余字母均小写)的字符串 | >>> str2 = 'fish love' >>> str2.title() 'Fish Love' |
istitle() | 如果字符串中是标题化(所有的单词都是大写开始,其余字母均小写),则返回True,否则False。 | >>> str2 = 'xiaoxie' >>> str2 = 'Feng Zhong' >>> str2.istitle() True |
partition(sub) | 找到字符串sub,把字符串分成一个3元组(pre_sub,sub,fol_sub),如果字符串中不包含sub则返回(‘原字符串’,”,”) | >>> str2 = 'partition' >>> str2.partition('pa') ('', 'pa', 'rtition') >>> str2.partition('ti') ('par', 'ti', 'tion') >>> str2.partition('fs') ('partition', '', '') |
rpartition(sub) | 类似于partition()方法,不过是从右边开始查找。 | >>> str2 = 'partition' >>> str2.rpartition('fs') ('', '', 'partition') |
replace(old,new[,count]) | 把字符串中的old字符串替换成new字符串,如果count指定,则替换不超过count次 | >>> str2 = '1f2f3f4f5f' >>> str2.replace('f','d') '1d2d3d4d5d' >>> str2.replace('f','d',2) '1d2d3f4f5f' |
find(sub[,start[,end]]) | 检测sub是否包含在字符串中,如果有则返回索引值,否则返回-1,start和end参数表示范围,可选。 | >>> str2 = '感谢小甲鱼' >>> str2.find('小') 2 >>> str2.find('小',3,5) -1 |
rfind(sub[,start[,end]]) | 类似于find()方法,不过是从右边开始查找。 | >>> str2 ='1a2b3c4d5b' >>> str2.rfind('b') 9 |
index(sub[,start[,end]]) | 与find方法一样,但是如果sub不在sring中会产生一个异常。 | >>> str2.index('小') 2 >>> str2.index('小m') Traceback (most recent call last): File "<pyshell#68>", line 1, in <module> str2.index('小m') ValueError: substring not found |
rindex(sub[,start[,end]]) | 类似于index()方法,不过是从右边开始查找。 | >>> str2 ='1a2b3c4d5b' >>> str2.rindex('b') 9 |
join(sub) | 以字符串作为分隔符,插入到sub中所有的字符之间。 | >>> str2 = '小甲鱼' >>> str2.join('12345') '1小甲鱼2小甲鱼3小甲鱼4小甲鱼5' |
split(sep=None,maxsplit=-1) | 不带参数默认以空格为分隔符切片字符串,如果maxsplit参数有设置,则仅分隔maxsplit个字符串,返回切片后的字符串拼接的列表。 | >>> str = 'i love fishc' >>> str.split() ['i', 'love', 'fishc'] >>> str.split('l',2) ['i ', 'ove fishc'] |
splitlines([keepends]) | Python splitlines() 按照行(‘\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 | >>> str2 = 'ab c\n\nde fg\rkl\r\n' >>> str2.splitlines() ['ab c', '', 'de fg', 'kl'] >>> str2.splitlines(False) ['ab c', '', 'de fg', 'kl'] >>> str2.splitlines(True) ['ab c\n', '\n', 'de fg\r', 'kl\r\n'] |
startswith(prefix[,start[,end]]) | 检查字符串是否以prefix开头,是则返回True,否则返回False。start和end参数可以指定范围检查,可选。 | >>> str2 = 'qanfin' >>> str2.startswith('q') True >>> str2.startswith('f',3) True |
translade(table) | 根据table的规则(可以由str.maketrans(‘a’,’b’)定制)转换字符串中的字符。 | >>> str2 = 'fsfas12123sfsfsfsf' >>> str2.translate(str.maketrans('f','b')) 'bsbas12123sbsbsbsb' |
课后习题
测试题
- 如何定义一个跨越多行的字符串吗?(请至少写出两种实现的方法)?
方法一:
>>> str1='''床前明月光,
疑是地上霜,
举头望明月,
低头思故乡。'''
方法二:
>>> str1='床前明月光,\
疑是地上霜,\
举头望明月,\
低头思故乡。'
方法三:
>>> str1=('床前明月光,'
'疑是地上霜,'
'举头望明月,'
'低头思故乡。')
- 三引号字符串通常我们用于做什么使用?
三引号字符串不赋值的情况下,通常当作跨行注释使用,例如:
'''这是一个三引号字符串用于注释的例子,
例子虽然只是简简单单的一句话,
却毫无遮掩地体现了作者用情至深,
所谓爱至深处情至简!'''
print("I love FishC.com!")
================== RESTART: C:/Users/ThinkPad/Desktop/5.py ==================
I love FishC.com!
file1 = open('C:\Windows\Temp\readme.txt','r')
表示只读方式打开C:\windows\temp\readme.txt
这个文本文件,但事实上这个语句会报错,知道为什么吗?你会如何修改?
>>> file1 = open('C:\Windows\Temp\readme.txt','r')
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
file1 = open('C:\Windows\Temp\readme.txt','r')
OSError: [Errno 22] Invalid argument: 'C:\\Windows\\Temp\readme.txt'
会报错是因为在字符串中,我们约定\t
和\r
分别表示横向制表符(TAB)
和回车符
,详见字符串格式化符号含义及转义字符含义,因此并不会按照我们计划的路劲去打开文件。
Python为我们铺好了解决的道路,只需要使用原始字符串操作符(R或r)即可:
file1 = open(r'C:\Windows\Temp\readme.txt','r')
- **有字符串:
str1 = '<a href="http://www.fishc.com/dvd" target="_blank">鱼C资源打包</a>'
,请问如何提取子字符串:
www.fishc.com
**
str1[str1.find('www.fishc.com'):str1.find('/dvd')]
'www.fishc.com'
- 如果使用负数作为索引值进行分片操作,按照第三题的要求你能正确目测出结果吗?
>>> str1[-45:-32]
'www.fishc.com'
- 还是上题的字符串,请问下边语句会显示什么内容?
>>> str1[20:-36]
'fishc'
- 怎么解开此字符串:
str1='i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
>>> str1[::3]
'ilovefishc.com'
动动手
请写一个密码安全性检查的代码:check.py
密码安全性检查代码
低级密码要求:
1. 密码由单纯的数字或字母组成
2. 密码长度小于等于8位中级密码要求:
1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
2. 密码长度不能低于8位高级密码要求:
1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
2. 密码只能由字母开头
3. 密码长度不能低于16位
# 密码安全性检查代码
#
# 低级密码要求:
# 1. 密码由单纯的数字或字母组成
# 2. 密码长度小于等于8位
#
# 中级密码要求:
# 1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
# 2. 密码长度不能低于8位
#
# 高级密码要求:
# 1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
# 2. 密码只能由字母开头
# 3. 密码长度不能低于16位
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'
passwd = input('请输入需要检查的密码组合:')
# 判断长度
length = len(passwd)
while (passwd.isspace() or length ==0):
passwd = input("您输入的密码为空(或空格),请重新输入:")
length = len(passwd)
if length <=8:
flag_len = 1
elif 8< length < 16:
flag_len = 2
else:
flag_len = 3
flag_con = 0
# 判断是否包含特殊字符
for each in passwd:
if each in symbols:
flag_con +=1
break
# 判断是否包含字母
for each in passwd:
if each in chars:
flag_con +=1
break
# 判断是否包含数字
for each in passwd:
if each in nums:
flag_con +=1
break
# 打印结果
while 1:
print("您的密码安全级别评定为:",end='')
if flag_len == 1 or flag_con == 1:
print("低")
elif flag_len == 3 and flag_con ==3 and (passwd[0] in chars):
print("高")
print("请继续保持")
break
else:
print("中")
print("请按以下方式提升您的密码安全级别:\n\
\t1. 密码必须由数字、字母及特殊字符三种组合\n\
\t2. 密码只能由字母开头\n\
\t3. 密码长度不能低于16位")
break
零基础入门学习Python(14)--字符串:各种奇葩的内置方法的更多相关文章
- 零基础入门学习Python(20)--函数:内嵌函数和闭包
知识点 global关键字 使用global关键字,可以修改全局变量: >>> count = 5 >>> def Myfun(): count = 10 prin ...
- 《零基础入门学习Python》【第一版】视频课后答案第001讲
测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...
- 零基础入门学习Python(1)--我和Python的第一次亲密接触
前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...
- 【Python教程】《零基础入门学习Python》(小甲鱼)
[Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609
- 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案
国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- 字符串:各种奇葩的内置方法 - 零基础入门学习Python014
字符串:各种奇葩的内置方法 让编程改变世界 Change the world by program 字符串:各种奇葩的内置方法 或许现在又回过头来谈字符串,有些朋友可能会觉得没必要,也有些朋友会觉得不 ...
- 《零基础入门学习Python》【第一版】视频课后答案第002讲
测试题答案: 0. 什么是BIF?BIF 就是 Built-in Functions,内置函数.为了方便程序员快速编写脚本程序(脚本就是要编程速度快快快!!!),Python 提供了非常丰富的内置函数 ...
- 零基础入门学习Python(26)--字典:当索引不好用时2
知识点 删除字典元素 能删单一的元素也能清空字典,清空只需一项操作. 显示删除一个字典用del命令,如下: >>> dict1 = {'a':1,'b':2,'c':3} >& ...
随机推荐
- HDU 2914 Triangle (Fibnacci 数)
题意:给你一个长度为 n 的木棒,求至少拿掉几根使得剩余的木棒构成不了三角形. 析:为了保证不形成三角形,所以保证两边之和等于最大边是最优,这不就是Fibnacci 数么,由于 n 很小,if-els ...
- 51nod 1238 最小公倍数之和 V3 【欧拉函数+杜教筛】
首先题目中给出的代码打错了,少了个等于号,应该是 G=0; for(i=1;i<=N;i++) for(j=1;j<=N;j++) { G = (G + lcm(i,j)) % 10000 ...
- centos 7 添加普通用户
adduser username username 是你要创建的用户名 passwd username 创建密码,输入个稍微复杂的 usermod -a -G wheel username 将用户加入 ...
- python之计数统计
前言: 计数统计,简单的说就是统计某一项出现的次数.实际应用中很多需求都需要用到这个模型,如检测样本中某一值出现的次数.日志分析某一消息出现的频率.分析文件中相同字符串出现的概率等等.以下是实现的不同 ...
- Python 学习之Virtualenv
Virtualenv是一个python环境的隔离工具,主要解决库的隔离和权限问题 Refer:中文版Virtualevn解释 用virtualenv创建多个python环境 我们360如何使用pyth ...
- Codeforces Round #230 (Div. 1)
A: 题意:给你一个半径为n的圆 求最少阻塞多少个点 才能使所以圆内及圆上的点 都不与外边的点相连 相连是距离为1 只算整数点 这题定住x,y依次递减 判断一下是否4-connect 这个意思就是 ...
- Android 重定向 init.rc中服务的输出
在init.rc中运行的服务,由于系统启动的时候将标准输出重定向到了/dev/null, 所以服务中的打印信息都不可见. 但调试时可能需要看到其中的打印信息,因此就有了logwrapper这个工具:l ...
- jsp 页面获取当前路径
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- Java的知识储备及面试-几个方面
1.Java本身语法基础 https://github.com/Snailclimb/JavaGuide/blob/master/Java%E7%9B%B8%E5%85%B3/Java%E5%9F%B ...
- IntelliJ IDEA导入JDK出现The selected directory is not a valid home for JDK问题的解决方法
JDK版本与IDEA版本不兼容: JDK版本过高可能会造成这个问题,需与IDEA相兼容的JDK才行. 比如,用IDEA2016.3.8版本的,JDK用jdk-10.0.1_windows-x64_bi ...