Python自学之路--004:Python使用注意点(原始字符串‘r’\字符转换\‘wb’与‘w区别’\‘\‘与‘\\’区别)

目录

1、原始字符串‘r’

2、字符转换问题

3、open与write函数’wb’与’w’区分

4、Python里面\与\\的区别


1、原始字符串‘r’

        以前的脚本通过Python2.7写的,通过Python3.12去编译发现不通用了,其实也是从一个初学者的角度去看待这些问题。

        其中的\被认为特殊字符串的一个标识,如下图

需要在前面加个“r”才被认为原始字符串。

2、字符转换问题

先辨别两个概念:

        encode()方法将字符串对象转换为字节序列。这通常用于将Unicode字符串转换为可以在文件系统中存储或通过网络传输的字节流。默认情况下,Python使用UTF-8编码,但你可以指定其他编码格式。

# 将字符串转换为UTF-8编码的字节序列
original_string = '你好,世界'
encoded_string = original_string.encode('utf-8')
print(encoded_string)  # 输出: b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c'

        decode()方法则是将字节序列转换回字符串对象。这在你从文件系统读取数据或接收网络传输数据时非常有用,需要将字节流转换回可读的字符串形式。

# 将UTF-8编码的字节序列解码回字符串
encoded_string = b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c'
decoded_string = encoded_string.decode('utf-8')
print(decoded_string)  # 输出: '你好,世界'

        简而言之,encode()用于将字符串编码为字节序列,而decode()用于将字节序列解码为字符串。在Python 3.x中,所有字符串默认都是Unicode字符串,因此编码和解码操作通常与处理非ASCII字符集相关。

3、open与write函数’wb’与’w’区分

梳理一个概念

'w'(写模式):

如果文件不存在,会创建一个新文件。

如果文件已存在,会覆盖原有内容。

打开文件后,可以直接写入字符串数据。

'wb'(二进制写模式):

如果文件不存在,同样会创建一个新文件。

如果文件已存在,也会覆盖原有内容。

        打开文件后,必须写入字节数据,而不是字符串。这通常用于写入非文本文件,如图片或其他二进制文件。

        在Windows系统中,使用'w'模式写入文件时,Python会将换行符\n自动转换为\r\n。而在'wb'模式下,Python不会做这种转换,写入的内容完全由程序员控制

例如,如果你想写入一行文本,使用'w'模式:

with open('example.txt', 'w') as file:file.write("Hello, world!\n")
如果你想写入二进制数据,使用'wb'模式:
with open('example.bin', 'wb') as file:file.write(b"Hello, world!\n")

注意,在'wb'模式下,写入的字符串前需要加上b前缀,表示这是一个字节对象。

写代码的时候发现一个问题,如下错误

        这个错误通常发生在尝试将字符串用于需要字节对象的操作时。在Python 3中,当你以二进制模式(‘b’)打开文件时,所有从文件中读取的数据都会作为字节对象返回,而不是字符串。如果你尝试使用字符串来进行包含测试或其他操作,就会遇到这个错误。

例如,如果你有以下代码:

with open(fname, 'rb') as f:lines = [x.strip() for x in f.readlines()]
for line in lines:if 'some-pattern' in line:continue

        在这个例子中,因为文件是以二进制模式打开的(‘rb’),所以line是一个字节对象。当你尝试检查'some-pattern'是否在line中时,你需要确保'some-pattern'也是一个字节对象,像这样:

if b'some-pattern' in line:continue

或者,你可以在打开文件时不使用二进制模式,这样读取的内容就会是字符串:

with open(fname, 'r') as f:lines = [x.strip() for x in f.readlines()]

        这样,lines中的每一行都是一个字符串,你可以像平常一样使用它们。如果你正在处理网络请求或其他二进制数据,确保在需要字符串的地方使用.decode()方法将字节解码为字符串,或者在需要字节的地方使用.encode()方法将字符串编码为字节。

        根据上述方式修改一下就行了,两种方式

4、Python里面\与\\的区别

        \ 是一个转义字符,用于插入那些字符本身有特殊意义的字符,如引号、问号等。例如,如果你想在字符串中包含一个双引号,你需要使用 \ 来转义它:

        print("这是一个包含\"双引号\"的字符串")

        输出将是:这是一个包含"双引号"的字符串

        \\ 实际上是一个转义序列,用于表示一个字面上的反斜杠。因为 \ 本身是一个转义字符,所以你需要两个反斜杠 \\ 来表示一个字面上的反斜杠。例如,如果你想在路径中使用反斜杠,你应该这样写:

        path = "C:\\Users\\Username\\Documents"

        这样,path 变量中的字符串将包含字面上的反斜杠。

        在处理文件路径时,建议使用原始字符串(在字符串前加 r),这样就不需要转义反斜杠了:

        path = r"C:\Users\Username\Documents"

        这样写更简洁,也更易于阅读。

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

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

相关文章

apk-parse包信息解析

最近公司做项目&#xff0c;需要解析apk包的基本信息&#xff0c;上网找了好多资料&#xff0c;最终决定使用apk-parse。 .yml文件 引入jar包 <dependency> <groupId>net.dongliu</groupId> <artifactId>apk-parser</artifactId> <version&…

Webstorm开发插件

WebStorm是一款由JetBrains开发的强大的JavaScript集成开发环境&#xff08;IDE&#xff09;&#xff0c;它为开发人员提供了丰富的功能和工具来提高开发效率。与此同时&#xff0c;WebStorm还支持插件开发&#xff0c;允许用户根据自己的需要扩展和定制IDE的功能。在本文中&am…

解放双手,批量自动上传视频到微信视频号

文件夹里面有很多视频&#xff0c;一个个手工上传到视频号很麻烦&#xff0c;可以借助AI来自动化。 先把视频号上传流程熟悉一遍&#xff0c;把一些按钮截图&#xff0c;记录一些屏幕坐标。 然后&#xff0c;在deepseek的代码助手中输入提示词&#xff1a; 你是一个Python编程…

Error: incorrect data check at Zlib.zlibOnError [as onerror] (node:zlib:189:17)

在macos Intel芯片本上运行yarn install报错&#xff1a; error https://registry.yarnpkg.com/esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz: incorrect data check error https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz: incorrec…

机器学习-SVM预测

本文使用机器学习SVM对数据进行预测。仅供参考 1、数据 1.1 训练数据集&#xff1a; medol.xlsx文件示例 otv3015-1.9153622093018-1.9634097763021-1.7620284083024-1.789477583 1.2 预测数据集 test.xlsx文件示例 ot35163519 2、模型训练 train.py import pandas as …

软件工程期末复习(8)需求的表达方法和状态转换图

需求的表达方法 系统模型 需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型&#xff0c;解决目标系统 “做什么” 的问题 通常软件开发项目是要实现目标系统的物理模型。目标系统的具体物理模型是由它的逻辑模型经实例化&#xff0c;即具体到某个业务领域而…

韵搜坊 -- java爬虫抓取数据

文章目录 三种抓取方式数据抓取的流程获取文章具体操作 获取用户获取图片jsoup操作 三种抓取方式 直接调用请求接口(最方便&#xff0c;这里使用该方法) HttpClient,OKHttp,RestTemplate,Hutool等网页渲染出明文内容后&#xff0c;从前端页面的内容抓取有些网站可能是动态请求…

第三十二天 | 46.全排列 47.全排列||

终于进入排列&#xff01;&#xff08;之前都是组合&#xff09; 排列和组合的区别&#xff1a;在数学上的区别都懂&#xff0c;主要是看在代码实现上有什么区别 题目&#xff1a;46.全排列 树型结构比较简单 用used标记某一元素是否使用过。在组合问题中&#xff0c;其实是…

【制作100个unity游戏之26】unity2d横版卷轴动作类游戏7(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言血条 能量条UI配置画布绘制血条 能量条UI 头像框 延迟虚血源码完结 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第26篇中&#xff0c;我们将探索如何…

C语言指向结构体数组的指针如何应⽤?

一、问题 在使⽤数组时&#xff0c;可以⽤指向数组或数组元素的指针和指针变量。同样&#xff0c;在结构体类型的数组及其元素中也可以应⽤指针或指针变量来指向。具体怎么应⽤呢&#xff1f; 二、解答 在如下代码中实现指向结构体数组的指针的应⽤。 #include <stdio.h&g…

【华为OD机试-C卷D卷-200分】找城市(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 一张地图上有n个城市,城市和城市之间有且只有一条道路相连:要么直接相连,要么通过其它城市中转相连(可中转一次或多次)。城市与城市之间的道路都不会成环。 当…

token存入前端的请求头中,后端获取【秒杀项目】

token存入前端的请求头中,后端获取【秒杀项目】 前言token存入前端的请求头中,后端获取【秒杀项目】token存入前端的请求头中后端获取 前言 2023-08-28 17:34:39 token存入前端的请求头中,后端获取【秒杀项目】 token存入前端的请求头中 function set_login_status() {var …

数据库设计大题详解

大题一&#xff1a;画E-R图&#xff08;概念结构设计&#xff09; 实体就是具体的物品&#xff0c;关系就是实体之间的关系&#xff0c;属性就是特征&#xff0c;内涵的意思 简单的小栗子&#xff1a; 1对1&#xff0c;1对n&#xff0c;n对m&#xff0c;自己考虑两者存在这个关…

PatterNodes 3 mac矢量图设计 ,色彩与图案的完美融合!

PatterNodes 3 for Mac是一款功能强大的矢量图形模式创建软件&#xff0c;专为Mac用户设计。它采用基于节点的界面&#xff0c;支持创建形状、线条、曲线或文本&#xff0c;以构建复杂的矢量图形模式。该软件还具备灵活的参数调整功能&#xff0c;允许用户实时预览结果并进行无…

根据参考风格进行矢量图绘制

摘要 利用机器学习根据给定的文本描述生成图像的技术已经取得了显著的进步&#xff0c;例如CLIP图像-文本编码器模型的发布&#xff1b;然而&#xff0c;当前的方法缺乏对生成图像风格的艺术控制。我们提出了一种方法&#xff0c;用于为给定的文本描述生成指定风格的绘图&…

Spring框架学习笔记(三):AOP编程

1 动态代理 1.1 通过案例理解动态代理 &#xff08;1&#xff09;需求说明&#xff1a; 1. 有 Vehicle接口(交通工具接口, 有一个 run 方法), 下面有两个实现类 Car 和 Ship 2. 当运行 Car 对象 的 run 方法和 Ship 对象的 run 方法时&#xff0c;输入如下内容, 注意观察前后…

HTML静态网页成品作业(HTML+CSS+JS)——在线购物商城网页设计制作(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现图片轮播切换&#xff0c;共有4个页面。 二、…

手机图片恢复不求人:手动找回丢失的照片!

无论是外出旅行、聚会还是日常点滴&#xff0c;我们总是习惯用手机记录下来&#xff0c;让美好的瞬间定格在一张张照片中。然而&#xff0c;有时因为误删、清空缓存或是更换手机&#xff0c;那些珍贵的照片突然消失了。手机图片恢复有什么简单易行、容易上手的方法吗&#xff1…

头歌答案哪里找

头歌EduCoder平台实训答案在此&#xff1a;实训笔记 有些作业是在难写&#xff0c;参考上面的连接地址吧&#xff0c;看看有没有自己想要的解答。

容器组件:角标组件,纵向拖动组件(HarmonyOS学习第四课【4.2】)

Badge&#xff08;角标组件&#xff09; 可以附加在单个组件上用于信息标记的容器组件。 说明 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 说明 子组件类型&#xff1a;系统组件…