【Python学习笔记】字符串管理操作

一、字符串的定义

  • 被定义在一对引号中的数据
  • 不可变数据类型
data_01 = "192.168.1.1"
data_02 = 'node01.linux.com'
data_03 = "/etc/fstab"
data_04 = ""
print(type(data_01), type(data_02), type(data_03), type(data_04))

<class 'str'> <class 'str'> <class 'str'> <class 'str'>

1.原始字符

  • 避免特殊字符被转义
  • 应用于正则表达式、windows文件路径

如果不加原始字符

data_dir = "C:\newfile\file01"
print(data_dir)

C:	#并不是我们想要的结果,并且把\n识别成了换行符
ewfileile01

使用原始字符

data_dir = r"C:\newfile\file01"
print(data_dir)

C:\newfile\file01

二、字符串的常规处理操作

获取字符串的长度

data_01 = "/etc/fstab"
print(len(data_01))

10

字符拼接

data_01 = "/etc/fstab"
print("cat " + data_01)

cat /etc/fstab

重复字段

data = "=="
print(data * 4)

========

判断成员关系

data = "python"
print("h" in data)

True
data = "python"
print("hn" in data)

False
data = "python"
print("a" not in data)

True

索引

  • 从左向右,下标从0开始
  • 从右向左, 下标从-1开始
data = "python"
print(data[2])

t	#从0开始输出第三个
data = "python"
print(data[-2])

o	#从后往前数

切片

data = "python"
print(data[2:5])

tho	#从0开始显示第三个到第四个
data = "python"
print(data[::2])

pto	#从0开始每隔2个输出
data = "python"
print(data[1:6:2])

yhn	#从1开始,会先显示自己,然后每隔2位输出
data = "python"
print(data[::-1])

nohtyp	#反向输出
替换Y为大写
data = "python"
print(data[0] + "Y" + data[2:6:])

pYthon

三、字符串对象操作方法

1.查看对象操作方法

print(dir(str))	#str代表字符串类型

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

2.转换大小写

data_dir = r"C:\Windows\X86"
print(data_dir.upper())	#全部转换成大写
print(data_dir.lower())	#全部转换成小写
print(data_dir.capitalize())	#首字符为大写

C:\WINDOWS\X86
c:\windows\x86
C:\windows\x86

3.判断字符开头和结尾

data_dir = r"C:\Windows\X86"
print(data_dir.startswith("C"))

True
data_dir = r"C:\Windows\X86"
print(data_dir.endswith("X86"))

True

自动补齐目录/

部分用户在输入路径的时候,有的习惯不会加上/

dir_name = input(r"请输入目录:")
if dir_name.endswith("/"):
    print(dir_name)
else:
    dir_name = dir_name + "/"
    print(dir_name)
    
请输入目录:/tmp
/tmp/

4.去除左右连段指定字符

data = "   master.linux.com    "
print(data.strip())	#去除空格

master.linux.com
data = "   1master.linux.com    1"
print(data.lstrip())	#去除左边的空格

1master.linux.com    1
data = "1   master.linux.com2    "
print(data.rstrip())	#删除右边的空格

1   master.linux.com2
data = "BBmaster.linux.comBB"
print(data.strip("BB"))	#去除两边BB

master.linux.com

5.例子:选择的时候替换大小写

比如我们的程序只识别小写的y,但是不同用户习惯,会把小写y打成大写Y

choice = input("确认/取消(y/n)? ").strip().lower()
if choice == "y":
    print("确认 %s" %choice)
else:
    print("取消")
    
确认/取消(y/n)? Y
确认 y

6.分割字符串

data = "linux unix macos windows"
print(data.split())	#空白为分隔符

['linux', 'unix', 'macos', 'windows']

取值

data = "linux unix macos windows"
print(data.split()[2])	#从0开始
macos

自定义分隔符

data = "linux.unix.macos.windows"
print(data.split("."))
['linux', 'unix', 'macos', 'windows']
取值
ip_addr = "192.168.1.1"
print(ip_addr.split(".")[0])
192

7.字符串替换

data = "hello python"
print(data.replace("o","1"))	#把所有o替换成1
hell1 pyth1n

指定替换

data = "hello python"
print(data.replace("o","1",1))	#只替换第一个

hell1 python

8.判断字符串组成结构

data = "123456"
print(data.isdigit())
True

data = "abc"
print(data.islower())
True

data = "Abc"
print(data.isupper())
False

data = "ab123c"
print(data.isalnum())
True

四、遍历字符串

data = "linux"
for i in data:
    print("%s" % data)
    
linux	#因为有5个字符,所以循环了5遍
linux
linux
linux
linux

1.生成10位随机数

import random
import string

all_data = string.ascii_letters + string.digits + string.punctuation

data = ""

for i in range(20):
    data = random.choice(all_data) + data
print(data)

!/s\WBT$+Go+=J^r*LmO