【Python字符串操作】常用方法和高级技巧

包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!


Python作为一种强大的编程语言,在处理文本数据方面提供了丰富而灵活的工具。字符串是Python中最常用的数据类型之一,掌握字符串操作不仅能提高代码效率,还能解决各种复杂的文本处理问题。本文将深入探讨Python字符串的各种操作方法和高级技巧。

1.字符串的本质与创建

  • 在Python中,字符串是不可变的序列类型。这意味着一旦创建了字符串,就不能修改其中的任何字符。所有看似修改字符串的操作实际上都是创建了一个新的字符串对象。
创建字符串的多种方式
# 使用单引号或双引号   
s1 = 'Hello'   
s2 = "World"      # 使用三引号创建多行字符串   
s3 = '''This is a   multi-line string'''      # 使用转义字符   
s4 = 'It\'s a beautiful day'      # 原始字符串,忽略转义字符   
s5 = r'C:\Users\Username\Documents'      # 字节字符串   
s6 = b'Hello'  # 只包含ASCII字符      # 使用str()函数   
s7 = str(42)  # 将其他类型转换为字符串   

2.字符串的基本操作

字符串拼接
  • 字符串拼接是最常见的操作之一。Python提供了多种方法来实现这一目标。
# 使用 + 运算符   
first_name = 'John'   
last_name = 'Doe'   
full_name = first_name + ' ' + last_name  # 'John Doe'      
# 使用 += 运算符   
greeting = 'Hello'   
greeting += ' World'  # 'Hello World'      
# 使用 join() 方法   
words = ['Python', 'is', 'awesome']   
sentence = ' '.join(words)  # 'Python is awesome'      
# 使用格式化字符串   
name = 'Alice'   
age = 30   
info = f'{name} is {age} years old'  # 'Alice is 30 years old'      
# 使用 str.format() 方法   
template = '{} is {} years old'   
info = template.format(name, age)  # 'Alice is 30 years old' 
字符串重复
  • 使用 * 运算符可以轻松地重复字符串。
laugh = 'Ha' * 3  # 'HaHaHa'   
line = '-' * 20   # '--------------------'   
字符串长度
  • 使用内置函数 len() 可以获取字符串的长度。
text = 'Hello, World!'   
length = len(text)  # 13   

3.字符串索引和切片

  • Python的字符串支持索引和切片操作,这使得访问和提取子字符串变得非常方便。
s = 'Python Programming'      # 索引(正向和反向)   
print(s[0])    # 'P'   
print(s[-1])   # 'g'      
# 基本切片   
print(s[7:18])  # 'Programming'   
print(s[:6])    # 'Python'   
print(s[7:])    # 'Programming'      
# 带步长的切片   
print(s[::2])   # 'Pto rgamn'   
print(s[::-1])  # 'gnimmargorP nohtyP' (反转字符串)      
# 使用切片修改字符串   
new_s = s[:6] + ' is ' + s[7:]  # 'Python is Programming'   

4.常用字符串方法

  • Python的字符串类型提供了大量的内置方法,用于执行各种字符串操作。
大小写转换
s = 'Hello, World!'      
print(s.upper())       # 'HELLO, WORLD!'   
print(s.lower())       # 'hello, world!'   
print(s.capitalize())  # 'Hello, world!'   
print(s.title())       # 'Hello, World!'   
print(s.swapcase())    # 'hELLO, wORLD!'      
# 检查大小写   
print('HELLO'.isupper())  # True   
print('hello'.islower())  # True   
print('Title Case'.istitle())  # True   
查找和替换
s = 'Python is amazing and Python is powerful'      
# 查找   
print(s.find('Python'))      # 0   
print(s.find('Python', 10))  # 25 (从索引10开始查找)   
print(s.rfind('Python'))     # 25 (从右侧开始查找)      
# index() 方法类似于 find(),但在未找到时会引发 ValueError   
try:       
print(s.index('Java'))   
except ValueError:       
print("'Java' not found in the string")      
# 计数   
print(s.count('Python'))  # 2      
# 替换   
print(s.replace('Python', 'Java'))  # 'Java is amazing and Java is powerful'   
print(s.replace('Python', 'Java', 1))  # 'Java is amazing and Python is powerful' 
分割和连接
# 分割   
s = 'apple,banana,orange,grape'   
fruits = s.split(',')  # ['apple', 'banana', 'orange', 'grape']      
# 限制分割次数   
print('a,b,c,d'.split(',', 2))  # ['a', 'b', 'c,d']      
# 按行分割   
multiline = '''Line 1   Line 2   Line 3'''   
lines = multiline.splitlines()  # ['Line 1', 'Line 2', 'Line 3']      
# 连接   
new_s = '-'.join(fruits)  # 'apple-banana-orange-grape'      
# 使用空字符串连接   
letters = ['H', 'e', 'l', 'l', 'o']   
word = ''.join(letters)  # 'Hello'  
去除空白字符和其他字符
s = '   Hello, World!   '      
print(s.strip())    # 'Hello, World!'   
print(s.lstrip())   # 'Hello, World!   '   
print(s.rstrip())   # '   Hello, World!'      
# 去除指定字符   
s = '...Python...'   
print(s.strip('.'))   # 'Python'   
print(s.lstrip('.'))  # 'Python...'   
print(s.rstrip('.'))  # '...Python' 
对齐和填充
s = 'Python'      
print(s.ljust(10))        # 'Python    '   
print(s.rjust(10))        # '    Python'   
print(s.center(10))       # '  Python  '      
# 使用指定字符填充   
print(s.ljust(10, '-'))   # 'Python----'   
print(s.rjust(10, '*'))   # '****Python'   
print(s.center(10, '='))  # '==Python=='      
# 使用 zfill() 在数字字符串左边填充零   
print('42'.zfill(5))      # '00042'   

5.字符串格式化

  • Python提供了多种字符串格式化的方法,每种方法都有其特定的用途和优势。
% 运算符(旧式字符串格式化)
name = 'Alice'   
age = 30      
print('My name is %s and I am %d years old.' % (name, age))   
# 'My name is Alice and I am 30 years old.'      
# 使用字典   
print('%(name)s is %(age)d years old.' % {'name': 'Bob', 'age': 25})   
# 'Bob is 25 years old.' 
str.format() 方法
print('My name is {} and I am {} years old.'.format(name, age))   
# 'My name is Alice and I am 30 years old.'      
# 使用索引   
print('The {1} {0} {2}'.format('brown', 'quick', 'fox'))  # 'The quick brown fox'      
# 使用命名参数   
print('The {adj} {noun}'.format(adj='happy', noun='programmer'))   # 'The happy programmer'      
# 格式化选项   
pi = 3.14159   
print('Pi is approximately {:.2f}'.format(pi))  # 'Pi is approximately 3.14'   
f-strings (Python 3.6+)
name = 'Charlie'   
age = 35   
print(f'My name is {name} and I am {age} years old.')   
# 'My name is Charlie and I am 35 years old.'      
# 在f-string中使用表达式   
print(f'2 + 2 = {2 + 2}')  # '2 + 2 = 4'      
# 格式化选项   
import datetime   
now = datetime.datetime.now()   
print(f'Current time: {now:%Y-%m-%d %H:%M:%S}')   # 例如:'Current time: 2023-04-13 15:30:45'   

6.高级字符串操作

字符串比较
  • Python支持字符串的比较操作,这在排序和条件判断中非常有用。
# 字典序比较   
print('apple' < 'banana')  # True   
print('Python' == 'python')  # False      
# 忽略大小写比较   
s1 = 'python'   
s2 = 'PYTHON'   
print(s1.lower() == s2.lower())  # True   
字符串的成员资格测试
text = 'Python is amazing'   
print('Python' in text)  # True   
print('Java' not in text)  # True
字符串的开头和结尾检查
filename = 'document.txt'   
print(filename.startswith('doc'))  # True   
print(filename.endswith('.txt'))  # True      
# 使用元组检查多个选项   
print(filename.endswith(('.txt', '.pdf', '.doc')))  # True   
字符串的转换和编码
# 转换为字节   
s = 'Hello, World!'   
b = s.encode('utf-8')   
print(b)  # b'Hello, World!'      
# 从字节转换回字符串   
s2 = b.decode('utf-8')   
print(s2)  # 'Hello, World!'      
# 处理不同编码   
s_unicode = '你好,世界!'   
b_gbk = s_unicode.encode('gbk')   
s_from_gbk = b_gbk.decode('gbk')   
print(s_from_gbk)  # '你好,世界!'   
使用正则表达式
  • 对于更复杂的字符串操作,可以使用Python的re模块进行正则表达式匹配。
import re      
text = "The quick brown fox jumps over the lazy dog"      # 查找所有单词   
words = re.findall(r'\w+', text)   
print(words)  # ['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']      
# 替换   
new_text = re.sub(r'fox', 'cat', text)   
print(new_text)  
# "The quick brown cat jumps over the lazy dog"      
# 分割   
parts = re.split(r'\s+', text)   
print(parts)  # ['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']   

7.性能考虑

  • 在处理大量字符串时,性能是一个重要因素。以下是一些提高字符串操作性能的技巧:
  1. 使用 join() 而不是 + 进行多个字符串的拼接。
  2. 对于需要多次修改的字符串,考虑使用 list 存储字符,最后再 join。
  3. 使用 str.translate() 进行批量字符替换,比多次调用 replace() 更快。
  4. 对于大文本的处理,考虑使用生成器和迭代器来减少内存使用。
# 示例:高效地构建大字符串   
def build_string(n):       
parts = []       
for i in range(n):           
parts.append(f"Part {i}")       
return ' '.join(parts)      
large_string = build_string(10000) 

结论

  • Python的字符串操作功能强大而灵活,掌握这些方法和技巧可以大大提高文本处理的效率。从基本的字符串创建和拼接,到高级的格式化和正则表达式匹配,Python为各种复杂度的字符串操作提供了全面的解决方案。
  • 在实际编程中,根据具体需求选择合适的方法,并注意性能优化,将帮助你更好地处理文本数据。
    图片

总结

  • 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利

  • 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!

  • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
  • ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
  • ③ 100多个Python实战案例,学习不再是只会理论
  • ④ 华为出品独家Python漫画教程,手机也能学习

可以扫描下方二维码领取【保证100%免费

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/903476.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习系列——RNN/LSTM/GRU,seq2seq/attention机制

1、RNN/LSTM/GRU可参考&#xff1a; https://zhuanlan.zhihu.com/p/636756912 &#xff08;1&#xff09;对于这里面RNN的表示中&#xff0c;使用了输入x和h的拼接描述&#xff0c;其他公式中也是如此 &#xff08;2&#xff09;各符号图含义如下 2、关于RNN细节&#xff0c;…

VMware虚拟机启动报错“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”

之前正常使用的VMware虚拟机&#xff0c;突然启动时报错&#xff1a;此主机支持 Intel VT-x&#xff0c;但 Intel VT-x 处于禁用状态&#xff0c;详细信息如下截图所示。   百度错误信息&#xff0c;根据参考文献1中的方案&#xff0c;进入BIOS设置启动VT-x。进入BIOS后&…

顺序表-数组逆置

今天开始进入算法环节&#xff0c;从头开始手撸各种算法&#xff0c;这里使用C语言&#xff0c;后续我会补充Java版的。 大家都知道顺序表是一个线性表&#xff0c;那么他就具有线性表的特性&#xff0c;那就是随机存取&#xff0c;它的逻辑地址跟物理地址都是相同的&#xff…

一个简单的 uas_send_bye.xml for SIPp

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> <scenario name"iinv-o200-obye.xml -- wjd 2014"><recv request"INVITE" rrs"true"/><send>&l…

单片机串口和电脑串口连接

单片机串口和电脑串口连接&#xff1a; 先将MCU的TTL电平转换为RS232电平&#xff0c;才可以和电脑的串口DB9相连接。见下图所示&#xff1a; 翻看自己以前记录的笔记&#xff0c;真是初级到极点了。

Java Lock Semaphore 总结

前言 相关系列 《Java & Lock & 目录》&#xff08;持续更新&#xff09;《Java & Lock & Semaphore & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Java & Lock & Semaphore & 总结》&#xff08;学习总结/最新最准…

文案语音图片视频管理分析系统-视频矩阵

文案语音图片视频管理分析系统-视频矩阵 1.产品介绍 产品介绍方案 产品名称&#xff1a; 智驭视频矩阵深度分析系统&#xff08;SmartVMatrix&#xff09; 主要功能&#xff1a; 深度学习驱动的视频内容分析多源视频整合与智能分类高效视频检索与编辑实时视频监控与异常预警…

C#判断点是否在多边形内

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff01;人工智能学习网站 前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任…

【SQL Server】解决因使用 varchar 类型存储 Unicode 字符串导致的中文显示乱码问题

问题描述 导入 SQL 到 SQL Server 数据库后&#xff0c;存在部分列的中文显示异常的问题。 原因分析 观察发现显示异常的字段的数据类型是 varchar&#xff0c;而显示正常的字段的数据类型是 nvarchar。 而且&#xff0c;SQL 文件中所有字符串前面都带有 N 的前缀。 在 SQL 中…

su user更换用户后无法打开图形屏幕Cannot open your terminal ‘/dev/pts/0‘ 解决办法

我在docker内使用了su john更换了用户&#xff0c;执行petalinux-config -c kernel时打不开图形屏幕窗口&#xff0c;需要执行命令script /dev/null 进入docker和配置状态的所有命令行命令如下&#xff1a; johnjohn-hp:~/zynq$ ./docker_ubuntu16.sh rootjohn-hp:/home/john/…

【永中软件-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Oracle自动处理表空间不足脚本

关注过我的朋友们应该知道我分享过一些常用的监控脚本&#xff0c;其中最常用的就是监控表空间使用率的脚本&#xff0c;具体可以参考如下链接​&#xff1b; oracle常用监控脚本&#xff08;纯干货&#xff0c;没有EMCC,ZABBIX也不怕&#xff09;_oracle 监控及日常处理脚本-…

如何用示波器测实时时钟信号和主时钟信号

使用示波器测量实时时钟信号&#xff08;RTC&#xff09;和主时钟信号&#xff08;Main Clock Signal&#xff09;的步骤如下&#xff1a; 1. 准备工作 选择合适的探头&#xff1a;使用高品质的示波器探头&#xff0c;通常10X衰减探头适合大部分情况。校准探头&#xff1a;确…

NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控系统建设方案

一、方案背景 智慧小区构成了“平安城市”建设的基石。随着社会的进步&#xff0c;社区安全问题逐渐成为公众关注的热点。诸如高空抛物、乱丢垃圾、破坏车辆、入室盗窃等不文明行为和违法行为频繁出现。目前&#xff0c;许多小区的物业管理和安全防护系统仍然较为简单和陈旧&a…

数据分析-38-关于互联网企业黑名单的探索

论文辅导或算法学习可以滴滴我 文章目录 项目介绍表和字典描述1、读取数据2、查看黑名单公司主要来自哪些城市3、查看黑榜公司分布城市4、存在的问题5、查看存在问题分类 项目介绍 在数字化的时代&#xff0c;信息的力量不言而喻&#xff0c;尤其当我们面临职业选择时。是一个…

论文略读:Can We Edit Factual Knowledge by In-Context Learning?

EMNLP 2023 第一个探索in-context learning在语言模型知识编辑方便的效果 传统的知识编辑方法通过在包含特定知识的文本上进行微调来改进 LLMs 随着模型规模的增加&#xff0c;这些基于梯度的方法会带来巨大的计算成本->论文提出了上下文知识编辑&#xff08;IKE&#xff0…

鼠标事件与webGl坐标系

弯道超车&#xff1a; 盒子模型&#xff1a; 又称CSS 盒模型&#xff0c;包含content、padding、border 和 margin 四个部分。 clientWidth、scrollWidth、offsetWidth之间的区别&#xff1a; offsetWidth&#xff1a;包含内容、padding、border 和滚动条的宽度&#xff08;如果…

Camp4-L0:Linux 前置基础

书生浦语大模型实战营Camp4-L0:Linux前置基础 教程地址&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/linux任务地址&#xff1a;https://github.com/InternLM/Tutorial/blob/camp4/docs/L0/linux/task.md 任务描述完成所需时间闯关任务完成SSH连接与…

「虚拟现实中的心理咨询:探索心灵世界的新方法」

内容概要 当我们想到虚拟现实时&#xff0c;很多人会联想到游戏或娱乐&#xff0c;但如今其在心理咨询领域的应用正在逐渐崭露头角。传统的心理咨询方式常常局限在咨询室内&#xff0c;面临着空间和情感隔阂的问题。然而&#xff0c;沉浸式环境的出现&#xff0c;使得治疗者能…

python:ADB通过包名打开应用

一、依赖库 os 二、命令 1.这是查看设备中所有应用包名的最简单方法。只需在命令行中输入以下命令&#xff1a; adb shell pm list packages 2.打印启动的程序包名 adb shell am monitor回车&#xff0c;然后启动你想要获取包名的那个应用&#xff0c;即可获得 3.查看正在运…