【Python 字符串】

Python 中的字符串(str)是用于处理文本数据的基础类型,具有不可变性、丰富的内置方法和灵活的操作方式。以下是 Python 字符串的核心知识点:


一、基础特性

  1. 定义方式

    s1 = '单引号字符串'
    s2 = "双引号字符串"
    s3 = '''三引号多行
    字符串'''
    s4 = """三引号多行
    字符串"""
    
  2. 不可变性

    s = "hello"
    s[0] = 'H'  # 报错:字符串不可修改
    
  3. 转义字符

    path = 'C:\\Users\\Name\\Documents'  # 反斜杠需转义
    text = "他说:\"Python 很有趣!\""    # 双引号需转义
    

二、常用操作

1. 字符串拼接
name = "Alice"
greeting = "Hello, " + name + "!"  # 拼接 → "Hello, Alice!"
2. 字符串重复
"Hi" * 3  # → "HiHiHi"
3. 成员检查
"a" in "apple"  # → True
4. 索引与切片
s = "Python"
s[0]    # → 'P'(正向索引,从0开始)
s[-1]   # → 'n'(反向索引,从-1开始)
s[1:4]  # → 'yth'(切片,左闭右开)
s[::-1] # → 'nohtyP'(逆序)

三、常用方法

1. 大小写转换
s = "hello World"
s.upper()   # → "HELLO WORLD"
s.lower()   # → "hello world"
s.title()   # → "Hello World"
2. 搜索与统计
s = "apple banana apple"
s.find("apple")  # → 0(首次出现位置)
s.count("apple") # → 2(出现次数)
s.startswith("ap") # → True
3. 替换与分割
s = "a,b,c,d"
s.replace(",", "-")  # → "a-b-c-d"
s.split(",")         # → ["a", "b", "c", "d"]
"-".join(["a", "b"]) # → "a-b"
4. 去除空白
s = "   hello   \n"
s.strip()   # → "hello"(去除首尾空白)
s.lstrip()  # → "hello   \n"(仅左侧)
s.rstrip()  # → "   hello"(仅右侧)

四、字符串格式化

1. f-string(推荐)
name = "Alice"
age = 25
f"姓名:{name},年龄:{age}"  # → "姓名:Alice,年龄:25"
2. str.format()
"{} is {} years old".format(name, age)  # → "Alice is 25 years old"
3. 百分号格式化
"数值:%.2f" % 3.1415  # → "数值:3.14"

五、编码处理

1. 编码转换
s = "你好"
bytes_data = s.encode("utf-8")  # → 字节串 b'\xe4\xbd\xa0\xe5\xa5\xbd'
original = bytes_data.decode("utf-8")  # → "你好"
2. 处理常见错误
# 忽略无法解码的字符
s = b'\xe4\xbd\xa0\xff'.decode("utf-8", errors="ignore")  # → "你"

六、高级技巧

1. 格式化对齐
s = "42"
s.rjust(5, '0')  # → "00042"(右对齐,填充0)
s.center(7, '-') # → "--42---"
2. 模板字符串(安全场景)
from string import Template
tpl = Template("Hello, $name!")
tpl.substitute(name="Bob")  # → "Hello, Bob!"
3. 路径操作(pathlib模块)
from pathlib import Path
path = Path("/user/docs/file.txt")
path.stem   # → "file"
path.suffix # → ".txt"

七、性能优化

  1. 避免频繁拼接

    # 低效方式
    res = ""
    for c in "long string":res += c# 高效方式
    parts = []
    for c in "long string":parts.append(c)
    "".join(parts)
    
  2. 预编译正则表达式(如需频繁匹配):

    import re
    pattern = re.compile(r"\d+")
    pattern.findall("a1b22c333")  # → ['1', '22', '333']
    

八、常见陷阱

  1. 索引越界

    s = "abc"
    s[3]  # 报错:IndexError
    
  2. 编码不一致

    # 错误示例:混合编码可能导致乱码
    with open("file.txt", "w", encoding="gbk") as f:f.write("你好")  # 需确保读写编码一致
    

通过掌握这些内容,可以高效处理文本数据,从简单的日志解析到复杂的自然语言处理任务。实际应用中需根据场景选择合适的方法,并注意编码和性能问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十六届蓝桥杯大赛软件赛C/C++大学B组部分题解

第十六届蓝桥杯大赛软件赛C/C大学B组题解 试题A: 移动距离 问题描述 小明初始在二维平面的原点,他想前往坐标(233,666)。在移动过程中,他只能采用以下两种移动方式,并且这两种移动方式可以交替、不限次数地使用: 水平向右移动…

如何使用极狐GitLab 软件包仓库功能托管 npm?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 软件包库中的 npm 包 (BASIC ALL) npm 是 JavaScript 和 Node.js 的默认包管理器。开发者使用 npm 共享和重用代码&#xff…

Matlab 基于Hough变换的人眼虹膜定位方法

1、内容简介 Matlab220-基于Hough变换的人眼虹膜定位方法 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

chili调试笔记14 画线 页面布置 线条导出dxf

2025-05-08 09-05-06 llm画线 页面布置 expand有自己的格式 删了就会按照子元素格式 不加px无效 没有指定尺寸设置100%无效 怎么把线条导出dxf command({name: "file.export",display: "command.export",icon: "icon-export", }) export class…

蓝绿发布与金丝雀发布

蓝绿发布与金丝雀发布 一、蓝绿发布:像「搬家」一样安全上线1. 生活化故事2. 技术步骤拆解步骤①:初始状态步骤②:部署新版本到绿环境步骤③:内部验证绿环境步骤④:一键切换流量步骤⑤:监控与回滚 3. 蓝绿发…

【2025五一数学建模竞赛B题】 矿山数据处理问题|建模过程+完整代码论文全解全析

你是否在寻找数学建模比赛的突破点?数学建模进阶思路! 作为经验丰富的美赛O奖、国赛国一的数学建模团队,我们将为你带来本次数学建模竞赛的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过程和解析&#xff0c…

JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点02面向对象编程02-02&#…

Yolo迁移训练-带训练源码

目录 下载Git 拉下yolo模型 下载labelimg 准备训练集 迁移训练 继续训练 下载Git Git - Downloading Package 拉下yolo模型 然后用克隆脚本拉下yolo模型 python clone_yolo.py import os import subprocess import sys import shutildef check_git_installed():"…

LangChain框架-PromptTemplate 详解

摘要 本文聚焦于 LangChain 框架中PromptTemplate提示词模板模块的深度解析,主要参考langchain_core.prompts源码模块与官方文档。系统梳理 LangChain 对提示词模板的封装逻辑与设计思路,旨在帮助读者构建全面、深入的知识体系,为高效运用LangChain 框架的提示词模板开发应用…

中小企业设备预测性维护三步构建法:从零到精的技术跃迁与中讯烛龙实践

在工业4.0浪潮中,中小企业常陷入"设备故障频发"与"数字化成本高企"的双重困境。本文基于半导体、食品加工等行业实证数据,结合中讯烛龙系统技术突破,为中小企业提供一套零基础、低门槛、可扩展的预测性维护实施框架&…

C30-函数

一 函数的优点 避免代码冗长模块化的设计思路(十分类似组装电脑)按功能划分,每个函数代表一个功能 二 函数的三要素 函数要先定义再使用(就像是变量一样)三要素: 函数名→体现功能参数列表 比如yf(x)→x就是参数又如yf(x,y)→x,y就是参数→参数的个数取决于需求 返回值:比如…

【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案

在使用 Spring Boot 构建多模块项目,集成 MyBatis-Plus 时,很多开发者会遇到类似如下启动报错: Error creating bean with name mapperScannerConfigurer ... Caused by: java.lang.IllegalArgumentException: Property basePackage is requ…

pimpl与unique_ptr的问题

PImpl与std::unique_ptr组合 pimpl(Pointer to Implementation)是C程序开发中非常常用的技巧之一,它的好处有: 节省程序编译时间保持程序/库的二进制兼容性隐藏实现细节 举例一个常见的pimpl的使用示例: // a.h class Impl; //前置声明 c…

C++类和对象:构造函数、析构函数、拷贝构造函数

引言 介绍:C类和对象:构造函数、析构函数、拷贝构造函数 _涂色_博主主页 C基础专栏 一、类的默认成员函数 先认识一下类中的默认成员函数: 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。⼀个类…

CTF - PWN之ORW记录

CTF - Pwn之ORW记录https://mp.weixin.qq.com/s/uiRtqCSopn6U6NqyKJ8I7Q

RabbitMQ 中的六大工作模式介绍与使用

文章目录 简单队列(Simple Queue)模式配置类定义消费者定义发送消息测试消费 工作队列(Work Queues)模式配置类定义消费者定义发送消息测试消费负载均衡调优 发布/订阅(Publish/Subscribe)模式配置类定义消…

民宿管理系统6

普通管理员管理&#xff1a; 新增普通管理员&#xff1a; 前端效果&#xff1a; 前端代码&#xff1a; <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-f…

vue3+ant design vue + Sortable实现多级表格列拖动

1、最近遇到个需求&#xff0c;需使用vue3ant design vue Sortable实现多级表格的表头允许用户拖拽移动。即当用户拖拽一级表头时&#xff0c;其对应的子级表头及数据应同步移动&#xff0c;并且只允许一级非固定表头允许拖拽。 2、代码 <a-table:data-source"rowDat…

第五十四篇 AI与数据分析

一、AI数据分析就像做菜 想象你在厨房做一道新菜&#xff0c;AI数据分析的流程其实非常相似&#xff1a; 买菜&#xff08;获取数据&#xff09; 去市场挑选新鲜蔬菜 从Excel/数据库获取数据例&#xff1a;pd.read_csv(超市销售表.csv) 洗菜切菜&#xff08;清洗数据&#x…

差分OPA verilogaA 模型

做电路设计&#xff0c;需要提前用理想模型如VerilogA模型做验证。这里分享一个由ahdlib库里单端opamp改造而来的差分opamp。参考何乐年的《模拟集成电路设计与仿真》10.4节423页&#xff1b; 描述的小信号模型如上。 VerilogA 用到了SRI/C&#xff0c;GBWgm/C,gaingm*r1等概念…