一:概述

Python中的字符串的一些概念

  • 可以看作是字符的集合,在数据类型里没有单个字符的数据类型,可以用单个字符表示的一个字符串数据类型
  • 字符串是一种不可变的序列类型,单个字符从左到右按照顺序排列,同时修改某个位置的字符是不被允许的
  • 在Python3中,字符串可以分为三类,str用于Unicode文本,bytes用于二进制数据,bytearray是bytes的一种可变的变体

1.1 字符串的创建

通过单引号,双引号,三引号来创建一个字符串对象,本质上单引号和双引号及三引号的作用是一样的。

name1 = 'wangys'
name2 = "wangys"
name3 = '''wangys''' 使用单引号,双引号及三引号本质是一样的,都可以创建一个字符串对象

1.2  其他

也可以将不同的字串进行合并,字串之间使用空格,作用类似于 +号操作

name = 'wa' "ng" '''ys'''
print(name)
# wangys
name = 'wa',"ng",'''ys''' # 如果之间使用逗号,会组成一个元祖
print(name)
('wa', 'ng', 'ys')

二: 基本操作

  • 索引
  • 分片
  • 乘法
  • 判断是否包含值
  • 长度
  • 最大值
  • 最小值

2.1 字符串索引及切片

  • 字符串时有序字符集合,可以通过位置(索引)找到相应的元素
  • Python中字符的偏移量是左到右开始计数的,从0开始,到字符串长度-1,也可以通过负数取得,负数偏移量跟这个字符串的长度之和就是这个字符的正偏移量
  • 表示方法是一对[]括号将偏移量写入即可得到该偏移量的字符
  • 分片时使用冒号分隔,切片结果包括左边界,不包括右边界,即顾头不顾尾
  • 分片时如果忽略了边界,左边界从0开始,右边界到字符串长度-1结束即到字符串的结尾并包括这个结尾
  • 分片时如果指定了步进数,意思是每隔步进数取一个索引值
  • 切片操作不仅仅对字符串有效,对元祖及列表也是一样的
  • 如果索引过界,通过索引取值时会报错

2.1.1  索引

name = 'wangys'
print(name[0])
print(name[2])
print(name[-1])
print(name[-3])
# w
# n
# s
# g

2.1.2  分片(slice)

name = 'wangys'
# 没有定左右边界,则包括整个字符串
print(name[:])
# wangys # 没有定左边界,则从0开始
print(name[:3])
# wan # 如果没有定右边界,则到字符串的结尾
print(name[1:])
# angys
#左右都定了边界,顾首不顾尾
print(name[1:-1])
# angy
# 左右都定了边界,顾首不顾尾
print(name[1:3])
an
name = 'wangys'
# 步长默认情况
print(name[::1])
# 返回取整个字符串
print(name[::-1])
# 偏移量从1到5没隔2步取一个索引
print(name[1:5:2])
# 偏移量从5到1 每隔2步取一个索引
print(name[5:1:-2])

2.2  字符串拼接“+”

first_name = 'jack'
second_name = 'john' name = first_name+' '+second_name
print(name)
# jack john # 仅限字符串凭借,当使用数字类型时会报错
name = 'wangys'
age = 18
info = name+age
print(info)
# TypeError: must be str, not int
 
name = 'wangys'
age = '18'
info = name+age
print(info)
# wangys18

2.3 字符串多复制*

name = 'wangys'
ret = name*3
print(ret)
# wangyswangyswangys
print('-'*8)
--------

2.4 计算字符串的长度

# 使用len函数计算字符串中字符的个数
name = 'wangys'
print(len(name))
# 6

2.5  循环遍历整个元素

name = 'wangys'
for i in name:
print(i,end=' ') # w a n g y s

2.6 in操作

info = 'I love you'
print('love' in info)
print('you' not in info)
# True
# False

2.7 max min

  • 按照ASCII计算最大和最小值
name = 'wangys'
print(max(name))
print(min(name))
#y
# a

三:  字符串常用的操作

3.1  center

  • 将字符串居中显示
  • 有两个参数,第一个参数是整个字符串的长度,第二个参数是填充字符串(长度为1)
name = 'wangys'
print(name.center(30,'*')) # 长度30,不够使用*填充
# ************wangys************ name = 'wangys'
print(name.center(30,'*#')) # 填充字符必须是长度为1的字符
# TypeError: The fill character must be exactly one character long name = 'wangys'
print(name.center(30)) # 默认用空格填充
# wangys

3.2  strip

  • strip 默认删除两边的空白,空白包括空格,制表符,换行符等.
  • 插在中间的空格不会删掉,也可以制定删除的特殊符号,但还是哪个原则,插在中间的并不删除
  • lstrip 删除左边
  • rstrip 删除右边
name = input('请输入你的名字:')
if name == 'wangys':
print('你好啊')
name = input('请输入你的名字:').strip()
if name == 'wangys':
print('你好啊')
name = ' #wan#gys*'
print(name.strip(' #*'))
name = ' wangys '
print(name.lstrip())
print(name.rstrip())

3.3  startswith/endswith

  • 以什么为开头,以什么结尾
name = 'wangys'
print(name.startswith('wa'))
print(name.startswith('ng',2,5))
print(name.endswith('ys'))

应用:判断请求,以哪个字符串开始,或者结尾

name = 'wangys'
if name.startswith('wa'):
pass
elif name.startswith('ll'):
pass
import os
files = os.listdir('.')
# 找出已py文件结尾的文件
py_files = [file for file in files if file.endswith('.py')]
print(py_files)
# 找出以py或者以sh结尾的文件 多个条件过滤时使用元祖条件(必须是元祖)
py_sh_files = [file for file in files if file.endswith(('.py', '.sh'))]
print(py_sh_files)

3.4 find

  • 找匹配得子字符串得索引
  • 如果找到就将找到得第一个符合匹配得子字符串索引返回,如果找不到就返回-1
  • 可以指定起始和结束位置进行查找
s = 'hello world'
print(s.find('world'))
# 6 # 找到了就不会再往后找了
s = 'hello world'
print(s.find('o'))
# 4 # 第二个参数表示从第7个字符开始查找
s = 'hello world'
print(s.find('o',6))
# 7 # 表示从7到10之间得字符查找
s = 'hello world'
print(s.find('o',7,10))
# 7 # 如果找不到就返回-1
s = 'hello world'
print(s.find('o',10,18))
# -1
# 用户输入大字符串,循环找出用户输入的字符串的位置
s = input('请输入大的字符串:') while True:
subString = input('请输入要查询的子字符串:') if subString.lower() == 'end':
break
elif subString:
start = 0
end = len(s)
while True:
startPostion = input('请输入开始查找的位置:')
if startPostion == '':
startPostion = start
elif startPostion.isdigit():
startPostion = int(startPostion)
break
else:
print('请输入数字')
continue
while True:
stopPostion = input('请输入结束查找的位置:')
if stopPostion == '':
stopPostion = end
elif stopPostion.isdigit():
stopPostion = int(stopPostion)
break
else:
print('请输入数字')
continue
index = s.find(subString,startPostion,stopPostion)
if index == -1:
print('没找到')
else:
print("'{}' 在 '{}'出现的位置是{}".format(subString,s,s.find(subString,startPostion,stopPostion)))
else:
print('请不要输入空字符串')

3.5 index

  • 找出子字符串的索引位置
  • 如果找不到就报错
name = 'wangys'
print(name.index('a'))
print(name.index('angy'))
print(name.index('lala')) #
#
# ValueError: substring not found

3.6   split

  • 将字符串进行切割
  • 于join方法互为逆方法,将字符串生成列表类型
  • 默认以空格,制表符,换行符作为分隔符,也可以指定切割符
path = '/usr/local/nginx'
listPath = path.split('/')
print(listPath) s = r'\\'
windowsPath = s.join(listPath)
print('C:'+windowsPath) # ['', 'usr', 'local', 'nginx']

# C:\\usr\\local\\nginx

3.7  capitalize

  • 首字母大写
name = 'wangyongsheng'
name = name.capitalize()
print(name)
# Wangyongsheng

不论字符串里是否有大写字母,都会将首字母大写,其他的都是小写

name = "WangYS"
name = name.capitalize()
print(name)
# Wangys

3.8   upper/lower

  • 全部大写
name = 'wangys'
name = name.upper()
print(name)
  • 全部小写
name = 'WangYongSheng'
name = name.lower()
print(name)

应用:比如说验证码校验,对用户输入不区分大小写

code_num = 'WangYs'
input_num = input("请输入验证码,不区分大小写:")
if code_num.lower() == input_num.lower():
print("输入正确")
else:
print("请重新输入")

3.9  swapcase

name = 'WangYs'
name = name.swapcase()
print(name)

3.10 title

将以空格或者其他特殊字符或者数字隔开的字符串首字母大写

name = 'wang yong sheng'
name = name.title()
print(name) name = 'wang*yong-sheng'
name = name.title()
print(name)

3.11  replace

  • 字符串是不可变数据类型,所谓修改并不是在本身上做修改,而是生成了一个新的字符串。
  • 可以使用replace进行修改 
msg = 'wangys wangys'
print(msg.replace('wangys','wc'))
print(msg.replace('wangys','wc',1))

# wc wc
 # wc wangys

3.12  count

1: 如果多个,就返回一个数

2:如果没有,返回0

3:可以切片后再进行计数

msg = 'My name is wangys'
print(msg.count('a'))
print(msg.count('x'))
print(msg.count('wangys'))
print(msg.count('a',2,5))

3.13   isdigit/isalnum/isalpha

  • isdigit  判断字符串只有数字组成
  • isalpha 判断字符串只有字母组成
  • isalnum 判断字符串是否有数字和字母组成
msg = 'wangys123'
print(msg.isalnum()) #字符串由字母或数字组成
print(msg.isalpha()) #字符串只由字母组成
print(msg.isdigit()) #字符串只由数字组成

四 :字符串格式化

4.1 %s %d

name = input("姓名:")
age = int(input("年龄:"))
height = int(input("身高:")) msg = '''
-------- Info of %s ---------
姓名:%s
年龄:%d岁
身高:%scm
''' % (name,name,age,height) print(msg)

4.2  {} 按照位置

name = input("姓名:")
age = int(input("年龄:"))
height = int(input("身高:")) msg = '''
-------- Info of {} ---------
姓名:{}
年龄:{}岁
身高:{}cm
'''.format(name,name,age,height) print(msg)

4.3 {} 按照指定位置

name = input("姓名:")
age = int(input("年龄:"))
height = int(input("身高:")) msg = '''
-------- Info of {1} ---------
姓名:{1}
年龄:{2}岁
身高:{3}cm
'''.format(name,name,age,height) print(msg)

4.4 {} 按照关键字

name = input("姓名:")
age = int(input("年龄:"))
height = int(input("身高:")) msg = '''
-------- Info of {name} ---------
姓名:{name}
年龄:{age}岁
身高:{height}cm
'''.format(name=name,age=age,height=height) print(msg)

五:其他操作

1: 利用int或者float进行类型转换

a = 1
b = '2'
print(a+b) # 字符串无法跟数字相加
TypeError: unsupported operand type(s) for +: 'int' and 'str' # 报错 a = 1
b = '2'
b = int(b) # 可以通过int()函数将字符串数字转换为数字,然后进行运算
print(a+b)
# 3

2: len函数

  • 去字符串字符的长度
name='wangys'
print(len(name))

遍历字符串

  • 根据索引
name='wangys'

count = 0
while count < len(name):
print(name[count])
count +=1
  • for 循环

for 变量 in 可迭代对象

name = 'wangys'
for i in name:
print(i)

3 join 方法

  • 该方法用于连接序列中的方法

  • 跟split方法正好相反
  • join方法只能用于字符串类型,如果是其他数据类型,则会报错
list = ['1','2','3']
s = '+'
ret = s.join(list)
print(ret)
# 1+2+3 dir = ['','usr','local','nginx']
linux_s = '/'
linuxPath = linux_s.join(dir)
windows_s=r'\\'
windowsPath = windows_s.join(dir)
print(linuxPath)
print('C:'+windowsPath)
# /usr/local/nginx
# C:\\usr\\local\\nginx list = [1,2,3,4,5]
s = '+'
print(s.join(list))
# TypeError: sequence item 0: expected str instance, int found

Python数据类型之字符串的更多相关文章

  1. Python数据类型-02.字符串

    本文主要记录字符串的相关知识,包括字符串的定义特点,常用方法和 请知悉: 计算机中,一切皆为对象世界万物,皆为对象,一切对象皆可分类 1.什么是字符串? 类似"hello world&quo ...

  2. Python数据类型(字符串)

    文章内容参考了教程:http://www.runoob.com/python/python-basic-syntax.html#commentform Python 字符串 字符串是 Python 中 ...

  3. python基础【2】——python数据类型之字符串

    python数据类型-字符串 一. 字符串的表示方法(str) 作用: 记录文本信息 表示方法:' ' 单引号 " "双引号 ''' '''三单引号 ""&qu ...

  4. Python数据类型之字符串类型

    字符串的表示 字符串是Python中最常用的数据类型之一,必须使用成对的引号包围来表示字符串,引号可以是单引号 ' .双引号 " .三引号''' """,格式如 ...

  5. Python 数据类型:字符串

    一.字符串介绍 字符串是由单引号/双引号/三引号引起来的,由字母 .数字或符号等构成的一串字符 In [1]: name = "Tom" # 定义字符串 In [2]: type( ...

  6. python数据类型和字符串(三)

    一.变量 变量声明变量 #!/usr/bin/env python age= gender1='male' gender2='female' 变量作用:保存状态(程序的运行本质是一系列状态的变化,变量 ...

  7. Python数据类型-----数字&字符串

    Python数字类型 int类型表示的范围:-2147483648至2147483648之间,超出这个范围的数字即视为long(长整形) 在Python中不需要事先声明数据类型,它是根据具体的赋值来进 ...

  8. Python基础-python数据类型之字符串(四)

    字符串 字符串是python中常用的数据类型,使用('或")来创建. 创建字符串: 下标索引 字符串实际上是字符的数组,所以也支持索引. str1 = 'abcdef' 切片 定义:切片是指 ...

  9. python数据类型(数字\字符串\列表)

    一.基本数据类型——数字 1.布尔型 bool型只有两个值:True和False 之所以将bool值归类为数字,是因为我们也习惯用1表示True,0表示False. (1)布尔值是False的各种情况 ...

随机推荐

  1. linux中创建python的虚拟环境

    1,何为虚拟环境 linux是支持多用户的系统,如果某一位用户不想使用公用环境,想指定特殊的python版本安装仅供个人使用的一些包,那么虚拟环境将满足他的要求 2,虚拟环境使用需要virtualen ...

  2. SFTP远程连接服务器上传下载文件-vs2010项目实例

    本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,vs2010 vs2010项目实例下载地址:CSDN下载 如果没有CSDN积分,百度网盘下载(密码 ...

  3. linux下cmake安装mysql 源码

    1.假设已经有mysql-5.6.21.tar.gz以及cmake-2.8.4.tar.gz两个源文件 (1)先安装cmake(mysql5.5以后是通过cmake来编译的) [root@ rhel5 ...

  4. ActiveMQ常见消息类型

    JMS由下面三部分组成:消息头.属性.消息体.其中消息体定义了五种消息体格式,也可以称为消息类型. JMS规范中的消息类型包括TextMessage.MapMessage.ObjectMessage. ...

  5. 通过SecureCRT连接虚拟机

    继续上一篇: http://www.cnblogs.com/CoolJayson/p/7430421.html 上一篇配置了虚拟机网络环境, 实际开发中通常使用SecureCRT或Xshell等连接L ...

  6. Gradle的使用

    ⒈下载 点击此处 ⒉安装 1.解压 2.添加环境变量GRADLE_HOME 指向解压缩文件的磁盘地址 3.PATH环境变量添加%GRADLE_HOME%\bin ⒊使用阿里云仓库 repositori ...

  7. SPI总线协议及SPI时序图详解【转】

    转自:https://www.cnblogs.com/adylee/p/5399742.html SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接 ...

  8. 使用cstdiofile在vs2010中无法写入中文的问题

    在VC2010环境下, 以下代码无法实现使用CStdioFile向文本文件中写入中文(用notepad.exe查看不到写入的中文) CStdioFile file; file.Open(…); fil ...

  9. cocosCreater开发时遇到的问题

    生成vscode任务后无法编译: ctrl +p  -> 输入task compile 编译任务时提示 :由于使用任务版本 0.1.0,以下工作区文件夹将被忽略 这是cocos默认生成的code ...

  10. 题解-AtCoder-agc003F Fraction of Fractal(非矩阵快速幂解法)

    Problem AtCoder-agc003F 题意:给出\(n\)行\(m\)列的01矩阵,一开始所有 \(1\) 连通,称此为\(1\)级分形,定义\(i\)级分形为\(i-1\)级分形中每个标示 ...