字符串的join和os.path.join()

news2024/11/20 7:18:07

在这里插入图片描述

>>> key = "".join("I love China.")

>>> key

'I love China.'

>>> key.join("--xwf")

'-I love China.-I love China.xI love China.wI love China.f'

为什么执行key.join("--xwf")的结果不是“I love China.--xwf”

key.join("--xwf") 的结果不是 “I love China.–xwf” 是因为 join() 方法的工作方式与你可能预期的不同。让我解释一下:

  1. join() 方法是字符串的一个方法,用于将可迭代对象(如列表、元组或字符串)中的元素连接起来。

  2. 调用 join() 时,调用它的字符串(在这里是 key,即 “I love China.”)会被用作分隔符。

  3. 传递给 join() 的参数(在这里是 “–xwf”)被视为可迭代对象。因为字符串本身就是可迭代的,所以它会被当作字符的序列。

  4. join() 会在这个可迭代对象的每个元素之间插入分隔符。

所以,key.join("--xwf") 的过程是:

  • 取 “–xwf” 中的每个字符:‘-’, ‘-’, ‘x’, ‘w’, ‘f’
  • 在这些字符之间插入 “I love China.”

结果就是:
‘-I love China.-I love China.xI love China.wI love China.f’

如果你想得到 “I love China.–xwf”,你应该这样做:

result = key + "--xwf"

或者,如果你坚持要用 join(),可以这样:

result = "".join([key, "--xwf"])

这里,我们创建了一个包含两个元素的列表,然后用空字符串将它们连接起来。

os.path.join()

那好像路径拼接的时候也会用到join,为啥就不会出现插入分隔符的现象

路径拼接时使用 join 确实不会出现插入分隔符的现象,这是因为路径拼接使用的是 os.path.join() 函数,而不是字符串的 join() 方法。这两者的工作方式是不同的:

  1. 字符串的 join() 方法:

    • 调用者是分隔符
    • 参数是要连接的可迭代对象
  2. os.path.join() 函数:

    • 是一个独立的函数,不是字符串方法
    • 接受多个路径片段作为参数
    • 智能地处理路径分隔符,根据操作系统使用正确的分隔符(Windows 使用 ‘\’,Unix/Linux 使用 ‘/’)

例如:

import os

# 使用 os.path.join()
path = os.path.join('folder', 'subfolder', 'file.txt')
print(path)  # 输出:folder/subfolder/file.txt (在Unix/Linux系统上)

# 字符串的 join() 方法
separator = os.path.sep  # 获取系统的路径分隔符
path = separator.join(['folder', 'subfolder', 'file.txt'])
print(path)  # 输出:folder/subfolder/file.txt (在Unix/Linux系统上)

os.path.join() 专门设计用于路径拼接,它会正确处理路径分隔符,并且能够处理绝对路径和相对路径的混合。这就是为什么在路径拼接时不会出现像字符串 join() 方法那样的插入分隔符现象。

而且字符串的join并不会改变key是吗?比如


>>> key = "".join("I love China.")

>>> key

'I love China.'

>>> key.join("--xwf")

'-I love China.-I love China.xI love China.wI love China.f'

>>> key

'I love China.'

这个key还是'I love China.'

是的。字符串的 join() 方法不会改变原始字符串(在这个例子中是 key)。在 Python 中,字符串是不可变的(immutable)对象。这意味着一旦字符串被创建,就不能被修改。

当你调用 key.join("--xwf") 时,它会创建并返回一个新的字符串,而不会修改 key 本身。这就是为什么在操作后 key 的值仍然是 ‘I love China.’。

这种不可变性是 Python 字符串的一个重要特性,它确保了字符串操作的安全性和可预测性。如果你需要修改一个字符串,你总是会得到一个新的字符串对象,而原始字符串保持不变。

这个行为适用于所有的字符串方法,不仅仅是 join()。例如,upper(), lower(), replace() 等方法也都会返回新的字符串,而不是修改原始字符串。

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

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

相关文章

鄂尔多斯市鄂托克旗巴音乌苏六保煤矿5MW分布式光伏项目案例分析

摘 要:分布式光伏发电利用太阳能光伏板,分散布置在各区域,通过小规模、模块化并网或独立使用。其特点为就近发电、并网、转换和使用。技术进步和政策支持降低了光伏组件成本,推动了分布式光伏监控系统在多个领域的广泛应用。在全球…

【学习笔记】UWB技术定位原理

UWB技术还没有完全普及,却在慢慢兴起,一旦爆发,势不可挡也。 01-什么是UWB? UWB(Ultra Wide Band)是一种无载波通信技术,UWB不使用载波,而是使用短的能量脉冲序列,并通…

TikTok多语言商城系统源码+落地页 附搭建教程

TikTok多语言商城系统源码落地页 附搭建教程 环境 nginx php7.4.33 redis5.0.8 Memcached 1.6.6 mysql5.6 phpMyAdmin 伪静态 location / { try_files $uri $uri/ /index.php?$query_string; } 源码下载:https://download.csdn.net/download/m0_660477…

CVPR2021 安全AI挑战者计划第六期赛道一第二名方案分享 (UM-SIAT队)

关联比赛: CVPR2021 安全AI挑战者计划第六期:防御模型的白盒对抗攻击 CVPR2021 安全AI挑战者计划第六期赛道一第二名方案分享 (UM-SIAT队) 1.赛题简介 1.比赛通过15个防御模型测试攻击算法,其中包括13个在CIFAR-10上训练的模型…

单刀单掷(SPST)及单刀双掷(SPDT)模拟开关

单刀单掷(SPST)及单刀双掷(SPDT)模拟开关是对继电器元件的一种模拟简化, 本质上还是一种用开关控制的开关. 我们先从单刀双掷(SPDT)模拟开关与继电器的一个对比中了解其特性. 单刀双掷(SPDT)模拟开关 通过菜单 绘制--有源集成电路--添加模拟开关(SPDT) 可以添加一个单刀双掷…

我与Linux的爱恋:进程创建|终止

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:Linux的学习 ​ 文章目录 一、进程创建**fork函数**写时拷贝 二、进程终止进程退出的常见方法 一、进程创建 fork函数 在Linux中fork函数是非常重要的函数,它从已存在进程…

黑马智数Day4-2

渲染基础Table列表 封装获取企业列表接口 export function getEnterpriseListAPI(params) {return request({url: /park/enterprise,params}) } 组件中获取数据 <script> import { getEnterpriseListAPI } from /apis/enterprise export default {name: Building,dat…

C++ | Leetcode C++题解之第435题无重叠区间

题目&#xff1a; 题解&#xff1a; class Solution { public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.empty()) {return 0;}sort(intervals.begin(), intervals.end(), [](const auto& u, const auto& v) {retur…

直播平台美颜功能开发方案:基于视频美颜SDK的集成详解

本篇文章&#xff0c;小编将于大家共同探究视频美颜SDK的美颜功能开发方案&#xff0c;帮助开发者深入理解其集成过程及关键技术。 一、美颜功能的重要性 在竞争激烈的直播市场中&#xff0c;直播平台如何提升用户体验至关重要。美颜功能不仅能够改善主播的形象&#xff0c;提…

桌面专业版【查看MAC和ip地址】

UOS统信查看MAC和ip地址的方法。 文章目录 查看方法一、图形化界面查看二、命令查看 查看方法 一、图形化界面查看 打开控制中心-网络-网络详情中-Mac地址就是您电脑的mac地址&#xff0c;IPV4就是您电脑的ip地址。 二、命令查看 桌面右键选择在终端中打开&#xff0c;输入i…

9.25度小满一面

1.map的底层 2.unorder_map哈希表有自己实现过吗&#xff1f;哈希冲突 3.poll和epoll和select的优缺点、 4.线程同步机制是用来做什么的? 5.五子棋项目问题-- 算法题: 6.LeetCode.重排链表 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0…

Linux:地址分区——常量区、全局区、堆区、栈区

平台&#xff1a;Linux。本次实验是基于Linux平台&#xff0c;结论和其他平台大体相同&#xff0c;如有出入&#xff0c;也属于正常现象。实验内容&#xff1a;大致验证地址空间的各个分区。 结论如图&#xff1a; 结论说明&#xff0c;由低地址向高地址&#xff1a; 代码区&a…

Cortex-A7和Cortex-M7架构处理器取中断向量全流程分析

0 参考资料 Cortex M3权威指南(中文).pdf ARM Cortex-A(armV7)编程手册V4.0.pdf1 Cortex-A7和Cortex-M7处理器架构取中断向量全流程分析 1.1 什么是中断向量&#xff1f; 中断向量就是中断服务函数入口地址&#xff0c;例如我们发生了EXTI0中断&#xff0c;就需要执行EXT0中…

JavaScript 基础 - 第22天_Webpack模块打包工具

Day03_Webpack模块打包工具 目录 Webpack 简介与体验案例 - 打包注册用户网页插件 plugins 和加载器 loader 的使用案例 - 注册用户完成 - npm 作用在前端项目Webpack 开发服务器&#xff0c;打包模式调试代码 source map配置 路径 学习目标 了解 Webpack 的作用掌握 npm …

el-table中根据状态改单元格样式

需求&#xff1a;el-table中&#xff0c;有一列需要根据状态不同&#xff0c;显示的样式也不通。 解决方法&#xff1a; :cell-style"cellStyle" <el-table:data"tableData"style"width: 100%"size"mini"border:header-cell-style…

基于大数据可视化的化妆品推荐及数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

Html--笔记01:使用软件vscode,简介Html5--基础骨架以及标题、段落、图片标签的使用

一.使用VSC--全称&#xff1a;Visual Studio Code vscode用来写html文件&#xff0c;打开文件夹与创建文件夹&#xff1a;①选择文件夹 ②拖拽文件 生成浏览器的html文件的快捷方式&#xff1a; &#xff01;enter 运行代码到网页的方法&#xff1a; 普通方法&#xff1a…

毕业设计选题:基于ssm+vue+uniapp的自助购药小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

进阶SpringBoot之 Dubbo 及 Zookeeper 安装

Dubbo 文档 Dubbo 是一款高性能、轻量级的开源 Java RPC 框架 它提供了三大核心功能&#xff1a; 面向接口的远程方法调用、智能容错和负载平衡、服务自动注册和发现 ZooKeeper 是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是 Hadoop 和 Hbase …

Vue75 编程式路由导航

笔记 作用&#xff1a;不借助<router-link> 实现路由跳转&#xff0c;让路由跳转更加灵活 具体编码&#xff1a; //$router的两个API this.$router.push({name:xiangqing,params:{id:xxx,title:xxx} })this.$router.replace({name:xiangqing,params:{id:xxx,title:xxx} …