Python 基础 —— 字符串(python之字符串基本操作)
off999 2024-09-14 07:07 17 浏览 0 评论
字符串顾名思义就是"一串字符",是编程中表示纹波的一种基本数据类型。在Python中,字符串可以包含字母、数字、符号以及其他可打印的字符。必须使用引号括起来,既可以是单引号也可以是双引号;Python中的字符串是以Unicode标准为基础的,这意味着它们可以表示多种语言的字符。
1. 创建字符串
字符串可以通过将文本放在单引号(')或双引号(")之间来创建。单引号和双引号在Python中是等效的,你可以根据个人喜好或文本内容选择使用哪一种。
my_string = "Hello, World!"
another_string = 'Python is fun'
2. 字符串的属性
字符串在Python中是不可变的,这意味着一旦创建,你不能更改字符串中的单个字符。但是,你可以通过连接、切片和格式化等操作来创建新的字符串。
3. 字符串内置方法
python 字符串是由内建的str 类代表,那么str 类包含哪些方法呢?在python 中查询非常方便,它甚至不需要用户查询文档,只需要在idle 解释器中使用dir() ,help() 即可查询
如查看str 类包含的全部内容
C:\Users\Leon>python
Python 3.10.10 (tags/v3.10.10:aad5f6a, Feb 7 2023, 17:20:36) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> dir(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', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
上面列出了str 类提供的所有方法,其中_ 开头、_ 结尾的方法被约定为私有方法,不希望被外部调用
如果想查看某个方法的用法,则使用help 函数(), 在交互式解释器中输入如下命令
>>> help(str.isdigit)
Help on method_descriptor:
isdigit(self, /)
Return True if the string is a digit string, False otherwise.
A string is a digit string if all characters in the string are digits and there
is at least one character in the string.
以下是一些常用的字符串方法:
- len(): 返回字符串的长度。
- length = len(my_string) # 返回13
- upper(): 将字符串中的所有字符转换为大写。
- uppercase = my_string.upper() # "HELLO, WORLD!"
- lower(): 将字符串中的所有字符转换为小写。
- lowercase = my_string.lower() # "hello, world!"
- replace(old, new): 替换字符串中的子字符串。
- replaced = my_string.replace("World", "Python") # "Hello, Python!"
- split(sep=None): 根据指定的分隔符(默认为空格)将字符串分割为列表。
- words = my_string.split() # ["Hello,", "World!"]
- join(iterable): 通过在字符串的每个元素之间插入指定的字符串来连接一个字符串列表或元组。
- comma_separated = ",".join(["apple", "banana", "cherry"]) # "apple,banana,cherry"
- startswith(prefix): 检查字符串是否以指定的前缀开始。
- starts_with_hello = my_string.startswith("Hello") # True
- endswith(suffix): 检查字符串是否以指定的后缀结束。
- ends_with_exclamation = my_string.endswith("!") # True
- format(*args, **kwargs): 用于字符串格式化,可以插入变量或值。
- formatted = "My name is {} and I am {} years old.".format("Alice", 25)
print(formatted) # "My name is Alice and I am 25 years old."
4. 字符串操作
4.1. 原始字符串
在Python中,原始字符串(也称为“生字符串”)是一种特殊的字符串,它使用前缀 r 或 R 来定义。原始字符串在处理字符串时不会对反斜杠 (\) 进行转义,这意味着你可以在字符串中直接使用反斜杠而不需要使用两个反斜杠 (\\) 来表示一个字面意义上的反斜杠。
1. 创建原始字符串
要创建原始字符串,只需在字符串前加上 r 或 R 前缀:
raw_string = r"This is a raw string, it won't interpret backslashes as escape characters."
2. 原始字符串的用途
原始字符串特别适用于以下几种情况:
- 文件路径:在Windows系统中,文件路径经常包含反斜杠,使用原始字符串可以避免转义字符的麻烦。
- file_path = r"C:\Users\YourName\Documents\file.txt"
- 正则表达式:正则表达式中包含大量反斜杠,使用原始字符串可以简化表达式的书写。
- import re
pattern = r"\d+" # 匹配一个或多个数字 - 处理包含多个转义字符的字符串:如果你需要处理包含多个反斜杠的字符串,原始字符串可以简化字符串的创建。
- path = r"home\user\private#34;
3. 原始字符串与普通字符串的区别
在普通字符串中,反斜杠用作转义字符的前缀,用于表示特殊字符,如换行符 \n 或制表符 \t。如果需要在普通字符串中表示一个字面意义上的反斜杠,必须使用两个连续的反斜杠 \\。
# 普通字符串
normal_string = "This is an ordinary string with a backslash: \\"
print(normal_string) # 输出:This is an ordinary string with a backslash: \
# 原始字符串
raw_string = r"This is a raw string with a backslash: \\"
print(raw_string) # 输出:This is a raw string with a backslash: \\
4. 结论
原始字符串在处理需要大量使用反斜杠的场景时非常有用,它简化了字符串的书写并提高了代码的可读性。在Python中,根据需要选择使用普通字符串还是原始字符串是编写清晰、有效代码的关键。
4.2 长字符串
在Python中,长字符串通常指的是包含大量字符的字符串。Python没有对字符串长度施加硬性限制,因此可以创建任意长度的字符串。然而,实际的长度可能会受到可用内存的限制。
1. 创建长字符串
长字符串可以通过多种方式创建,包括使用三引号(""" 或 ''')定义的多行字符串,或者简单地通过连接多个短字符串。
2. 使用三引号定义多行字符串
long_string = """This is a very long string
that spans multiple lines in the source code.
It can contain any characters, including quotes and newlines."""
3. 连接多个字符串
long_string = "This is a long string " + "created by concatenating " + "multiple shorter strings."
4. 处理长字符串
处理长字符串时,可能会遇到以下情况:
- 内存消耗:长字符串会占用更多的内存资源。如果程序需要处理大量的长字符串,可能会导致内存不足。
- 性能:对长字符串进行操作(如拼接、搜索、替换等)可能比其他数据类型更耗时。
- 代码可读性:在源代码中直接定义长字符串可能会影响代码的可读性和维护性。
5. 优化长字符串的使用
为了优化长字符串的使用,可以采取以下措施:
- 分块处理:如果可能,将长字符串分成较小的部分进行处理。
- 外部存储:对于非常大的数据集,可以考虑将字符串存储在外部文件中,然后按需读取。
- 使用生成器:对于非常长的字符串,可以使用生成器函数来逐块生成和处理字符串,而不是一次性加载整个字符串。
# 示例:使用生成器处理长字符串
def read_large_file_in_chunks(file_path, chunk_size=1024):
with open(file_path, 'r') as file:
while True:
chunk = file.read(chunk_size)
if not chunk:
break
yield chunk
# 使用生成器逐块读取和处理文件
for chunk in read_large_file_in_chunks('large_file.txt'):
process_chunk(chunk) # 假设 process_chunk 是一个处理字符串的函数
在这个例子中,read_large_file_in_chunks 函数逐块读取文件内容,并通过生成器逐块产生字符串。这样可以避免一次性加载整个文件内容到内存中,从而节省内存并提高处理大文件的效率。
6. 结论
Python支持创建和处理任意长度的字符串,但在处理长字符串时需要注意内存消耗和性能问题。通过分块处理、外部存储或使用生成器,可以有效地管理和优化长字符串的使用。在实际编程中,应根据具体情况选择合适的方法来处理长字符串。
4.3 字节串
在Python中,字节串(bytes)是一种不可变的序列类型,用于表示二进制数据。字节串由一系列字节组成,每个字节是8位(1字节)的数据。字节串在处理二进制文件、网络通信以及任何涉及原始二进制数据的场景中非常重要。
1. 创建字节串
字节串可以通过多种方式创建:
- 使用字面量:在字符串前加上 b 前缀来创建字节串字面量。
- binary_data = b"\x00\x01\x02" # 包含字节 \x00, \x01, 和 \x02 的字节串
- 使用 bytes() 构造函数:可以传递一个整数序列或另一个字节串来创建新的字节串。
- bytes_from_list = bytes([0, 1, 2]) # 从整数列表创建字节串
bytes_from_bytes = bytes(b"example") # 从现有字节串创建新字节串
2. 字节串的操作
字节串支持多种操作,包括索引、切片、遍历和一些内置方法。
- 索引和切片:可以像处理普通字符串一样使用索引和切片来访问字节串中的字节。
- first_byte = binary_data[0] # 获取第一个字节
last_two_bytes = binary_data[-2:] # 获取最后两个字节 - 遍历:可以使用 for 循环遍历字节串中的每个字节。
- for byte in binary_data:
print(byte) # 打印每个字节 - 内置方法:字节串提供了一些内置方法,如 count(), find(), rfind(), index(), replace() 等。
- # 计算某个字节出现的次数
count_of_zero = binary_data.count(b'\x00')
3. 字节串与字符串的转换
有时需要在字节串和字符串之间进行转换。可以使用 decode() 方法将字节串解码为字符串,通常需要指定字符编码。相应的,encode() 方法可以将字符串编码为字节串。
# 将字节串解码为字符串
string_data = binary_data.decode('utf-8')
# 将字符串编码为字节串
new_binary_data = string_data.encode('utf-8')
4. 字节串的应用
字节串在Python中的许多地方都有应用,特别是在以下领域:
- 文件I/O:在读写二进制文件时,通常使用字节串或字节数组。
- 网络通信:通过网络发送和接收数据时,数据通常是以字节串的形式传输。
- 数据序列化:在将数据转换为可以存储或传输的格式时,经常需要处理字节串。
注意事项
字节串和字符串在很多方面都相似,但它们处理的数据类型不同。字符串用于处理Unicode文本,而字节串用于处理二进制数据。 在处理字节串时,需要注意字节顺序和跨平台兼容性问题。 在字节串和字符串之间转换时,必须确保使用正确的字符编码,以避免数据损坏或乱码。
通过理解字节串的概念和操作,你可以在Python中有效地处理二进制数据,无论是在文件操作、网络编程还是其他需要直接操作字节的场景中。
4.4 字符串和转义字符
在Python中,字符串是用来表示文本的数据类型。字符串可以包含字母、数字、符号以及各种可见的字符。在某些情况下,需要在字符串中表示那些通常有特殊意义的字符,或者无法直接输入的字符。这时,转义字符(也称为逃逸序列)就派上用场了。
1. 转义字符
转义字符以反斜杠 \ 开头,后跟一个或多个字符,用于表示那些无法直接输入或有特殊意义的字符。以下是一些常用的转义字符:
转义字符 | 描述 | 示例 |
\\ | 反斜杠 | path = "C:\\Users\\" |
\' | 单引号 | name = "O'Reilly" |
\" | 双引号 | text = "She said, \"Hello!\"" |
\n | 换行符 | paragraph = "First line\nSecond line" |
\r | 回车符 | text = "First line\rSecond line" |
\t | 制表符(水平制表符) | data = "Name\tAge\nAlice\t25" |
\b | 退格符 | text = "Hello\bWorld" |
\f | 换页符 | text = "First page\fSecond page" |
\xhh | 十六进制数表示的字符(hh是十六进制数) | color = "\x00ff00"(绿色) |
2. 使用转义字符的场景
- 包含特殊字符:当你需要在字符串中包含一个通常会被解释器处理为特殊字符的字符时,比如引号或换行符。
- 格式化字符串:在创建包含变量或特定格式的字符串时,使用转义字符可以在字符串中插入特殊字符或控制输出格式。
- 文件路径:在表示文件路径时,尤其是在Windows系统中,反斜杠是路径分隔符,因此需要使用 \ 来避免路径被错误解析。
- 输出对齐:使用制表符 \t 可以在输出中创建对齐的列,这在打印表格数据时非常有用。
# 使用转义字符表示特殊字符
### 示例
string_with_quotes = "It's a beautiful day"
string_with_newlines = "First line\nSecond line"
string_with_tab = "Name\tAge\nJohn\t30"
print(string_with_quotes) # 输出 It's a beautiful day
print(string_with_newlines) # 输出两行,First line 和 Second line 分别在两行
print(string_with_tab) # 输出两行,Name 和 John 对齐,Age 和 30 对齐
注意事项
转义字符是字符串中的特殊序列,它们在字符串字面量中被解释为特定的字符或指令。 在处理字符串时,尤其是包含引号或其他特殊字符的字符串时,正确使用转义字符是非常重要的。 在某些编辑器或IDE中,可能需要配置以确保反斜杠字符不被错误地处理,特别是在Windows文件路径中。
通过使用转义字符,你可以在Python字符串中准确地表示任何字符,无论它们是否具有特殊意义。这使得字符串处理更加灵活和准确。
4.5 repr 和字符串
在Python中,repr 是一个内置函数,它返回对象的“官方”字符串表示形式,这个表示形式通常可以用 eval 函数来还原(在安全的情况下)。repr 的目的是提供一个明确的、能够被Python解释器理解的表示,通常包含对象的类型和足以重新创建该对象的信息。
字符串(str)是Python中用于表示文本的数据类型。字符串可以包含任意的Unicode字符,并且可以使用各种方法进行操作,如拼接、切片、格式化等。
1. `repr` 函数
repr 函数对于不同类型的对象有不同的行为:
- 对于自定义对象,repr 默认返回一个包含对象类型和对象id的字符串,以及通常用于创建该对象的表达式。
- 对于字符串,repr 返回一个包含原始字符串表示的表达式,其中特殊字符都被转义。
my_string = "Hello, World!"
print(repr(my_string)) # 输出 '"Hello, World!"'
在这个例子中,repr 返回的字符串包含了原始字符串的字面量表示,双引号被转义为 \"。
2. 字符串的 `repr` 表示
当你对一个字符串调用 repr 函数时,你会得到一个可以用于重新创建该字符串的Python表达式。这意味着输出的字符串将包含所有的转义序列,以便在执行时能够精确地重建原始字符串。
# 对于包含特殊字符的字符串
special_string = "Line1\nLine2"
print(repr(special_string)) # 输出 '"Line1\\nLine2"'
在这个例子中,换行符 \n 被转义为 \\n,这样当你使用 eval 函数或直接在Python解释器中执行这个表达式时,你会得到一个包含原始换行符的字符串。
3. 使用 `repr` 与字符串
repr 通常用于调试和开发,因为它提供了关于对象的详细信息。在处理字符串时,repr 可以帮助你理解字符串中的特殊字符和结构。
4. 字符串的 `repr` 与 `str`
虽然 repr 函数返回的字符串通常包含引号和转义序列,但你可以很容易地将这个表示转换为一个普通的字符串,不包含这些额外的字符。这可以通过再次使用 str 函数或 eval 函数来实现:
# 从repr表示转换回普通字符串
clean_string = str(repr(special_string)) # 'Line1\nLine2'
evaluated_string = eval(repr(special_string)) # 'Line1\nLine2'
print(clean_string) # 输出 Line1\nLine2
print(evaluated_string) # 输出 Line1
# Line2(由于eval执行了字符串中的换行)
在这个例子中,str(repr(special_string)) 移除了引号和转义序列,而 eval(repr(special_string)) 则执行了字符串中的Python代码,重建了原始字符串对象。
5. 结论
repr 是一个有用的工具,特别是在处理字符串时,它可以帮助你理解字符串的确切内容和结构。通过使用 repr,你可以得到一个精确的字符串表示,这个表示可以用来重新创建字符串对象,或者用于调试和文档记录。
相关推荐
- python gui编程框架推荐以及介绍(python gui开发)
-
Python的GUI编程框架有很多,这里为您推荐几个常用且功能强大的框架:Tkinter:Tkinter是Python的标准GUI库,它是Python内置的模块,无需额外安装。它使用简单,功能较为基础...
- python自动化框架学习-pyautogui(python接口自动化框架)
-
一、适用平台:PC(windows和mac均可用)二、下载安装:推荐使用命令行下载(因为会自动安装依赖库):pipinstallPyAutoGUI1该框架的依赖库还是蛮多的,第一次用的同学耐心等...
- Python 失宠!Hugging Face 用 Rust 新写了一个 ML框架,现已低调开源
-
大数据文摘受权转载自AI前线整理|褚杏娟近期,HuggingFace低调开源了一个重磅ML框架:Candle。Candle一改机器学习惯用Python的做法,而是Rust编写,重...
- Flask轻量级框架 web开发原来可以这么可爱呀~(建议收藏)
-
Flask轻量级框架web开发原来可以这么可爱呀大家好呀~今天让我们一起来学习一个超级可爱又实用的PythonWeb框架——Flask!作为一个轻量级的Web框架,Flask就像是一个小巧精致的工...
- Python3使用diagrams生成架构图(python架构设计)
-
目录技术背景diagrams的安装基础逻辑关系图组件簇的定义总结概要参考链接技术背景对于一个架构师或者任何一个软件工程师而言,绘制架构图都是一个比较值得学习的技能。这就像我们学习的时候整理的一些Xmi...
- 几个高性能Python网络框架,高效实现网络应用
-
Python作为一种广泛使用的编程语言,其简洁易读的语法和强大的生态系统,使得它在Web开发领域占据重要位置。高性能的网络框架是构建高效网络应用的关键因素之一。本文将介绍几个高性能的Python网络框...
- Web开发人员的十佳Python框架(python最好的web框架)
-
Python是一种面向对象、解释型计算机程序设计语言。除了语言本身的设计目的之外,Python的标准库也是值得大家称赞的,同时Python还自带服务器。其它方面,Python拥有足够多的免费数据函数库...
- Diagram as Code:用python代码生成架构图
-
工作中常需要画系统架构图,通常的方法是通过visio、processon、draw.io之类的软件,但是今天介绍的这个软件Diagrams,可以通过写Python代码完成架构图绘制,确实很co...
- 分享一个2022年火遍全网的Python框架
-
作者:俊欣来源:关于数据分析与可视化最近Python圈子当中出来一个非常火爆的框架PyScript,该框架可以在浏览器中运行Python程序,只需要在HTML程序中添加一些Python代码即可实现。该...
- 10个用于Web开发的最好 Python 框架
-
Python是一门动态、面向对象语言。其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性。除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还...
- 使用 Python 将 Google 表格变成您自己的数据库
-
图片来自Shutterstock,获得FrankAndrade的许可您知道Google表格可以用作轻量级数据库吗?GoogleSheets是一个基于云的电子表格应用程序,可以像大多数数据库管...
- 牛掰!用Python处理Excel的14个常用操作总结!
-
自从学了Python后就逼迫用Python来处理Excel,所有操作用Python实现。目的是巩固Python,与增强数据处理能力。这也是我写这篇文章的初衷。废话不说了,直接进入正题。数据是网上找到的...
- 将python打包成exe的方式(将python文件打包成exe可运行文件)
-
客户端应用程序往往需要运行Python脚本,这对于那些不熟悉Python语言的用户来说可能会带来一定的困扰。幸运的是,Python拥有一些第三方模块,可以将这些脚本转换成可执行的.exe...
- 对比Excel学Python第1练:既有Excel,何用Python?
-
背景之前发的文章开头都是“Python数据分析……”,使得很多伙伴以为我是专门分享Python的,但我的本意并非如此,我的重点还是会放到“数据分析”上,毕竟,Python只是一种工具而已。现在网上可以...
- 高效办公:Python处理excel文件,摆脱无效办公
-
一、Python处理excel文件1.两个头文件importxlrdimportxlwt其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入。2.读取exce...
你 发表评论:
欢迎- 一周热门
-
-
python 3.8调用dll - Could not find module 错误的解决方法
-
加密Python源码方案 PyArmor(python项目源码加密)
-
Python3.8如何安装Numpy(python3.6安装numpy)
-
大学生机械制图搜题软件?7个受欢迎的搜题分享了
-
编写一个自动生成双色球号码的 Python 小脚本
-
免费男女身高在线计算器,身高计算公式
-
将python文件打包成exe程序,复制到每台电脑都可以运行
-
Python学习入门教程,字符串函数扩充详解
-
Python数据分析实战-使用replace方法模糊匹配替换某列的值
-
Python进度条显示方案(python2 进度条)
-
- 最近发表
-
- python gui编程框架推荐以及介绍(python gui开发)
- python自动化框架学习-pyautogui(python接口自动化框架)
- Python 失宠!Hugging Face 用 Rust 新写了一个 ML框架,现已低调开源
- Flask轻量级框架 web开发原来可以这么可爱呀~(建议收藏)
- Python3使用diagrams生成架构图(python架构设计)
- 几个高性能Python网络框架,高效实现网络应用
- Web开发人员的十佳Python框架(python最好的web框架)
- Diagram as Code:用python代码生成架构图
- 分享一个2022年火遍全网的Python框架
- 10个用于Web开发的最好 Python 框架
- 标签列表
-
- python计时 (54)
- python安装路径 (54)
- python类型转换 (75)
- python进度条 (54)
- python的for循环 (56)
- python串口编程 (60)
- python写入txt (51)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python qt (52)
- python人脸识别 (54)
- python斐波那契数列 (51)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- centos7安装python (53)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)