Strings字符串

发布时间 2023-12-02 19:53:13作者: 别小乔我

字符串

参考视频链接: 【字符串】聪明办法学Python第二版_哔哩哔哩_bilibili

用两种不同的引号是为了表达一些 在引号里面要用到引号的情况!

字符串中的转义字符

前面有反斜杠 \ 的字符,叫做转义字符(只能作为一个字符)

print("双引号:\"")
双引号:"

print("反斜线:\\")
反斜线:\

print("换\n行")
换
行

# 等效于一个Tab键↓
print("这个是\t制\t表\t符\n也叫\t跳\t格\t键")
这个是	制	表	符
也叫	跳	格	键

s = "D\\a\"t\ta"
print("s =", s)
print("s 的长度为:", len(s))
s = D\a"t	a
s 的长度为: 7

repr() 函数

#现在有两个字符串
s1 = "Data\tWhale"
s2 = "Data        Whale"
#它俩看起来似乎是一样的
print("s1:", s1)
print("s2:", s2)

s1: Data	Whale
s2: Data    Whale
#但事实上两个不一样
s1 == s2
False

repr()函数可以直接看出python中字符串的内部结构,防止一些隐藏的程序进行执行

print(repr(s1))
print(repr(s2))
'Data\tWhale'
'Data        Whale'

一些字符常量

import string
print(string.ascii_letters)   # 打印ASCII码
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

print(string.ascii_lowercase)   #单独打印小写
abcdefghijklmnopqrstuvwxyz

print(string.ascii_uppercase)   #单独打印大写
ABCDEFGHIJKLMNOPQRSTUVWXYZ

print(string.digits)   # 打印数字类型
0123456789

print(string.punctuation)   # 打印python支持输出的所有特殊符号
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

print(string.printable)    # 打印python支持输出的字符
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

print(string.whitespace)   # 打印空白字符
 	

可以用上面的repr()函数来看空白字符的本质

print(repr(string.whitespace))
' \t\n\r\x0b\x0c'

一些字符串的运算

字符串的加乘,且字符串只能和字符串做加乘运算

print("abc" + "def")
print("abc" * 3)

abcdef
abcabcabc

in运算

可用于查看前面字符串是否在后面的字符串中

print("ring" in "strings")          # True
print("wow" in "amazing!")          # False
print("Yes" in "yes!")              # False
print("" in "No way!")              # True
print("聪明" in "聪明办法学 Python")  # True

字符串索引和切片

索引:可以让我们在特定位置找到一个字符

s = "Datawhale"    # 赋值给s
print(s[0])
print(s[1])
print(s[2])
print(s[3])
D
a
t
a

len(s)
9

print(s[len(s)-1]) # 最后一位了,因为从0开始的
e

print(s[len(s)])    # 越界报错

print(s[-5])   # 负数索引,字符串从右到左是从-1开始的
print(s[-4])
print(s[-3])
print(s[-2])
print(s[-1])   # 倒数第一个
w
h
a
l
e

切片:获取字符串的一部分,左边不写东西默认从0开始,右边不写东西默认执行到-1结束

s = "Datawhale"
print(s[0:4]) # 左闭右开,第五个取不到
print(s[4:9])
print(s[0:2])
print(s[2:4])
print(s[5:7])
print(s[7:9])
Data
whale
Da
ta
ha
le
print(s[:4])
print(s[4:])
print(s[:])
Data
whale
Datawhale

步长: step

print(s[:9:3]) # 经过3的长度取一次,这里默认0时取第一次
print(s[1:4:2])
Daa
aa

翻转字符串

s = "Datawhale"

print(s[::-1]) # 步长为负数就从右往左切片
elahwataD

print("".join(reversed(s)))   #join()可以把一个序列依次添加到字符串内
elahwataD

def reverseString(s):
    return s[::-1]
print(reverseString(s))
elahwataD

字符串的循环

用索引的for循环

s = "Data"
for i in range(len(s)):
    print(i, s[i])
    
0 D
1 a
2 t
3 a

也可以不用索引,用 in 运算

for c in s: # 依次取出
    print(c)
    
D
a
t
a

也可以使用 enumerate() 获得元素的序号

for i, c in enumerate(s):
    print(i, c)  
    
0 D
1 a
2 t
3 a

zip(a, b) 可以在一次循环中,分别从 ab同时取出一个元素,也可以采用enumerate()来分别获取俩个的序号

for i, (a, b) in enumerate(zip(s, reverseString(s))):  #翻转后的字符串
    print(i, a, b) #分别取出一个赋给a,b
    
0 D e
1 a l
2 t a
3 a h
4 w w
5 h a
6 a t
7 l a
8 e D

一些跟字符串相关的内置函数

str():将另外一个数据类型转换为字符串类型

len():输出一段字符串的长度

name = input("输入你的名字: ")
print("Hi, " + name + ", 你的名字有 " + str(len(name)) + " 个字!")
# 如果把str去掉就会报错,因为字符串才能被打印

输入你的名字: Datawhale
Hi, Datawhale, 你的名字有 9 个字!

chr():输出ASCII码对应的那个字符

ord():输出对应的ASCII码

两者是相反的用途

print(ord("A")) 
65

print(chr(65))
A
print(chr(ord("A") + ord(" ")))  # A的ASCII码是65,空格的ASCII码是32
a

lower()upper():大小写转换

print("YYDS YYSY XSWL DDDD".lower())
print("fbi! open the door!!!".upper())

yyds yysy xswl dddd
FBI! OPEN THE DOOR!!!

strip() :可以将字符串首尾的空格删除

replace()replace(A,B)将一个字符串中的子字符串A用B替换

print("聪明办法学 Python".replace("Python", "C"))
print("Hugging LLM, Hugging Future LLM".replace("LLM", "SD", 1)) 
# count = 1 (只换一次,后面如果还有则不会换了),如果后面没有参数,默认是全换

聪明办法学 C
Hugging SD, Hugging Future LLM

用这个方法还可以把某些字符串删除,(相当于替换为了None)

count():输出一个字符串出现的次数

print("This is a history test".count("is"))
print("This IS a history test".count("is"))   # 大小写敏感
3
2

startwith(): 检测该字符串是否是以某个字符串开头

endwith(): 检测是否以这个字符串结尾

print("Dogs and cats!".startswith("Do"))
print("Dogs and cats!".startswith("Don't"))
True
False

print("Dogs and cats!".endswith("!"))
print("Dogs and cats!".endswith("rats!"))
True
False

find():找到与子串在字符串内相对应的字符的起始位置

下面and起始位置是在序号为5的位置,返回5,如果找不到,则返回的值为-1

print("Dogs and cats!".find("and"))
print("Dogs and cats!".find("or"))
# 但是如果上面是s,s[-1]能找到,所以这里的-1仅仅表判断
5
-1

index():find():用法一致,都是用于从列表中找出某个值第一个匹配项的索引位置

但是不同的是,index():如果找不到则会错

f-string 格式化字符串

x = 42
y = 99

# 里面要用引号的话得是不同的引号
print(f'你知道 {x} + {y} 是 {x+y} 吗?')
你知道 42 + 99 是 141 吗?
其他格式化字符串的方法

如果要格式化字符串的话,f-string 是个很棒的方法,Python 还有其他方法去格式化字符串:

  • % 操作
  • format() 方法

参考资料:

字符串是不可变的,只能替换后赋值
s = "Datawhale"
s[3] = "e"      # Datewhale,常量不能直接赋值(list能,但字符串不行),报错!!!

s = s[:3] + "e" + s[4:] # 把s拆分然后重新赋值给s
print(s)	
Datewhale

基础文件操作 Filing

Open() 函数

用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数。

文件不存在则会自动创建文件

open(file, mode) 函数主要有 filemode 两个参数,其中 file 为需要读写文件的路径。mode 为读取文件时的模式,常用的模式有以下几个:

  • r:以字符串的形式读取文件。
  • rb:以二进制的形式读取文件。『readbit』
  • w:写入文件。『清空所有内容重新写入』
  • a:追加写入文件。『在指定行数插入内容(看光标指向)一般为末尾』

文件对象

open 函数会返回一个文件对象,在文件操作前,首先要了解文件对象提供了哪些常用的方法:

close(): 注意每次操作结束后,及时通过 close() 方法关闭文件

  • 在r 与rb模式下:
    • read(): 读取整个文件
    • readline(): 读取文件的一行
    • readlines(): 读取文件的所有行
  • 在 w与a模式下:
    • write():
    • writelines():
## 以 w 模式打开文件chap6_demo.txt
file = open('chap6_demo.txt', 'w')
## 创建需要写入的字符串变量 在字符串中 \n 代表换行(也就是回车)
content = 'Data\nwhale\n'
## 写入到 chap6_demo.txt 文件中
file.write(content)
## 关闭文件对象
file.close()

w 模式会覆盖之前的文件,如果你想在文件后面追加内容,可以使用 a 模式操作。