zl程序教程

您现在的位置是:首页 >  后端

当前栏目

预备小菜:Python入门之字符串

Python入门 字符串 预备 小菜
2023-06-13 09:17:15 时间

在数据分析的第一步数据采集过程中,很多内容是对字符串的操作,比如说文字的情感分析、甚至词云的制作也是对字符串进行分析。

需要注意的是,字符串跟语言没关系。当然也可以使用其他的语言实现这些功能,它们同样操作的是相同的字符串,不过只是不同的语言之间语法有所不同,实现起来的难易程度不一样。

数据分析的结果很大程度上跟数据质量有关系,在数据采集过程中的数据清洗步骤下,对字符串的操作是最常见的场景,下面我们一起来学习下在Python中是怎么操作字符串的。

字符串基本操作

字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串,字符串也是有运算符,跟数字一样能进行相加,得到一个新的字符串。首先我们先创建两个字符串,由此演示下字符串的运算符

str1= "hello"str2 = "world"

操作符

含义

示例

+

字符串拼接

>>> str1+str2“helloworld”

*

字符串重度输出

>>> str1*2“hellohello”

[]

字符串获取

>>> str1[2]‘l’

[n:m]

字符串部分截取,从n到m-1个

>>> str1[2:4]‘ll’;

in

判断字符是否在字符串中

>>>‘e’in str1True

not in

判断字符是否不在字符串中

>>>‘a’in str1True

编程语言中下标都是从0开始的。第一个字符是str1[0]。也可以从后往前取数,比如说想取倒数第二个字符,可以使用负数来表示。最后一个表示是-1,倒数第二个就是-2。

str1 = "hello world!"
str1[-2]
d #str1的倒数第二个字符

Python中的转义字符

在有些时候,我们需要字符串中加入的引号,在使用这些特殊字符的时候,是需要转义的。python 用反斜杠 \ 转义字符。常用的转义字符如下表所示。

转义字符

含义

\\

反斜杠符号

\'

单引号

\"

双引号

\n

换行符

\r

回车

\a

响铃

\t

横向制表符

\v

纵向制表符

在读取本地文件的时候,需要知道文件的路径。比如想在代码中读取E盘中download文件夹中test.txt文件,在电脑中的路径为:E:\download\test.txt。但是如果这样直接写在代码中python会认为其中的\t为横向制表符,这就无法在代码中正确的读取到该文件的路径,那么就需要使用转义符,正确的写法应该是:'‪E:\\download\\test.txt'

字符串常用方法

Python的str(字符串)对象有很多内置的方法,提供了很多方便的操作,我们可以直接使用内置方法达到想要的结果。

split()

Python 的split()是对字符串进行切片操作。函数中包含2个参数,一个是str,一个num。str表示以此参数作为分隔符,默认是所有的空字符,包括空格、换行(\n)、制表符(\t)等。num表示切分的次数,默认为 -1, 即分隔所有。

str1 = 'hello world !'
print(str1.split())# 默认切分
['hello', 'world', '!']
print(str1.split("l"))#以字母l作为分隔符
['he', '', 'o wor', 'd !']
print(str1.split("l", 1)) # 以字母l作为分隔符,只分割1次
['he', 'lo world !']

由此可以可看出分隔符是不显示在结果中的,返回的结果字符串按照分隔符切分后列表num参数的实际意义是进行几次切分。

join()

Python中的join()的用途与上面的split()相反,split()是对字符串进行切分,而join()是将序列的元素进行连接,拼装成一个新的字符串。语法为str.join(sequence)。Str表示进行连接符,sequence表示待拼接的序列。

strList = ['h', 'e', 'l', 'l', 'o']
print("".join(strList)) # 以空字符串作为连接符
Hello
print("-".join(strList))# 以-作为连接符
h-e-l-l-o

startswith()

Python startswith() 方法用于判断字符串是否以指定前缀结尾,如果以指定前缀结尾返回True,否则返回False。方法为参数start和end为可选参数。表示字符串开始的位置和结束的位置。

str1 = "hello"
print(str1.startswith("h")) #判断字符串是否是h开头
True

print(str1.startswith("he"))#判断字符串是否是he开头
True

print(str1.startswith("el"))#判断字符串是否是el开头
False

print(str1.startswith("el",1))#判断从第二个字符开始是否以el开头
True

print(str1.startswith("e",2,4))#判断从第三个字符到第五个字符是否以el开头
True

startswith()方法经常用来做返回的值的判断的场景,尤其是在数据获取的时候,不管是爬虫的结果还是本地数据读取,为了提高数据质量,都是需要做一些数据的筛选。

endswith()

上面的startswith()是判断字符串开头的方法,那endswith()是判断字符串结尾的方法,参数以及使用方法与startswith()相同。

str1 = "hello"
print(str1.endswith("o")) #判断字符串是否是o结尾
True
print(str1.endswith("lo"))#判断字符串是否是lo结尾
True
print(str1.endswith("o", 0, -1))#判断字符串的倒数第二个字符是否为o
False
print(str1.endswith("ll", 1, 4))#判断第三个字符到第五个字符是否以ll结尾
True

Start和end参数可以理解为先将元字符串进行从start到end的切分,然后在判断新字符串是否以指定字符开头或者结尾。如果end参数为负数,表示从字符串后面往前数。

replace()

Python的replace()的作用是字符串替换,参数有三个,原字符串oldStr,新字符串newStr,替换次数num,可选参数,默认全部替换,表示最多不超过num次,返回值是替换后的新字符串。

str1 = "hello"
str1 = "hello"
print(str1.replace("l", "L"))#将字符串l全部替换成L
heLLo
print(str1.replace("l", "L", 1)) #将字符串l替换成L且其替换一次
heLlo

replace()经常用于爬虫的url或者参数的处理上,也可以用于去除字符串中的所有空格,用法将old字符串为空格,新字符串为空字符串。代码如下:

str1 = "h e l l o"
print(str1.replace(" ", ""))
hello

lstrip()、rstrip()、strip()

这三个方法功能比较简单,分别是去除字符串开头的空格、结尾的空格和开头以及结尾的空格,strip()函数相当于lstip()+rstrip()。

str1 = " he llo "
print(str1.lstrip()) #去除开头的空格
hel lo
print(str1.rstrip())#去除结尾的空格
hel lo
print(str1.strip()) #去除开头和结尾的空格
hel lo

注意:以上方法仅对开头以及结尾的空格有效,并不能去除字符串中间的空格,如果需要去除字符串中间的空格,可以使用replace()。

encode()、decode()

这两个方法分别是以 encoding 指定的编码格式解码字符串和解码字符串。这里需要先要了解下什么是编码。我们都知道计算机只是认识0和1,那怎么让计算机认识我们编写英文、汉字,就是需要字符编码和字符集,简单讲就是按照用预先规定的编码格式对这些将文字、数字或其他对象转成代码。

而这些编码格式中对应着不同的字符集。由全国信息技术标准化技术委员会指定的汉字内码扩展规范表就是中文常用的GBK编码对应的字符集,部分如图所示。

在Python中对应的字符串编码和解码的方法就是encode()和decode(),有时候会看见网页上很多字符乱码,也包括之后我们在编写爬虫的时候,返回的text文本中文显示乱码,这是因为默认编码是系统编码,而中文window系统采用的GBK编码,当传输回来的字符用GBK解码的出现乱码的时候,说明该字符并不是使用GBK编码,而采用其他的编码格式,在通常情况下,为了避免字符编码引起的错误,通常采用兼容度最高的UTF8编码。

#编码和解码使用相同编码格式
str1 = "数据分析"
str1 = str1.encode('UTF8') #使用UTF8编码
print(str1)
b'\xe6\x95\xb0\xe6\x8d\xae\xe5\x88\x86\xe6\x9e\x90'
str1 = str1.decode ('UTF8') #使用UTF8解码
print(str1)
数据分析


#编码和解码使用不编码格式
str1 = "数据分析"
str1 = str1.encode('UTF8') #使用UTF8编码
print(str1)
b'\xe6\x95\xb0\xe6\x8d\xae\xe5\x88\x86\xe6\x9e\x90'
str1 = str1.decode ('GBK') #使用GBK解码
print(str1)
鏁版嵁鍒嗘瀽

乱码产生的问题是因为编码格式和解码格式不同,这个很像小学时候学英文,老师教单词读音,我们对英语不熟悉,把英语的读音用汉字写出来,然后给别人看,老师说是这个,别人看不懂,在别人看来你就是乱码。

在计算机里编码,其实跟世界上的语种一样,解决乱码的问题,是需要编码和解码格式统一。