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"

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

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

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

相关文章

ROS2 - 创建项目( Ubuntu 22.04 )

本文简述:在 Ubuntu22.04 系统中使用 VS Code 来搭建一个ROS2开发项目。 ROS2 安装: 可以运行下面的命令,一键安装: wget http://fishros.com/install -O fishros && . fishros 1. 创建工作空间 本文假设配置完成 VS …

探索未来:Google I/O 2024 AI重磅发布一览

亲爱的读者们,大家期待已久的Google I/O开发者大会终于到来了!今年的大会尤为特别,Google在发布会上大力强调了人工智能(AI)的重要性,可以说AI成为了绝对的主角。为了让大家快速了解今年的重点内容&#xf…

短视频创作者的9个免费实用的视频素材网站

在视频剪辑的过程中,找到高质量、无水印且可商用的视频素材是每个创作者的梦想。下面为大家推荐9个无水印素材网站,助你轻松获取所需的视频素材。 1. 蛙学府 - 提供丰富的高清视频素材,涵盖风景、人物、科技等类别。所有素材高清且可商用&…

2025秋招Java还是c++?

一、我的编程经 说说我的编程经历,在C和Java之间我经历了几个阶段: 大学期间,我浅尝辄止地学习了一段时间的Java,但后来放弃了,开始学习C/C。本科毕业后,我选择攻读硕士学位,并一直专注于C的学…

【错题集-编程题】空调遥控(二分 / 滑动窗口)

牛客对应题目链接:空调遥控 (nowcoder.com) 一、分析题目 1、滑动窗口 先排序,然后维护窗口内最大值与最小值的差在 2 * p 之间(max - min)。 2、二分查找 先排序,然后枚举所有的温度,⼆分出符合要求的…

C语言详解:数组指针

数组指针是指针 int* p[10] 这是指针数组的写法 ,因为【】的优先级比*高, 所以为了解决优先级问题,加() int(* p)[10]&arr;//数组的地址要存起来 说明p是指针(首先与*结合)&#xff0c…

python开发的学习路线

I. 基础知识学习 A. Python基础语法 变量和数据类型 学习如何定义变量,理解并使用不同的数据类型(整数、浮点数、字符串、布尔值等)。 掌握数字类型的转换和操作。 熟悉字符串的基本操作,如拼接、切片、替换和查找。 …

JVM内存模型最新面试题(持续更新)

问题:java中创建的对象一般放在哪里?(全流程包含从创建到回收) 回答 大部分对象在堆中,这个基本都知道; 少部分对象是会在栈中的,比如作用域不局限于方法内的方法内部变量,这类对象的特征一般就是生命周期…

JavaScript对象设计哲学:八种模式塑造高效代码

🔥 个人主页:空白诗 文章目录 一、引言 🚀二、Object 构造函数 🧱📌 基本用法📌 重要性📌 实际应用案例 三、对象字面量 📘📌 定义属性📌 定义方法&#x1f4…

2.2、Gitea忘记密码重置密码

忘记密码后,管理员可以使用gitea的主程序输入命令重置密码。 gitea admin user change-password --username myname --password asecurepassword

工业派-配置Intel神经计算棒二代(NCS2)

最近两天在工业派ubuntu16.04上配置了Intel神经计算棒二代——Intel Neural Compute Stick,配置过程之艰辛我都不想说了,实在是太折磨人。不过历尽千辛万苦,总算让计算棒可以在工业派ubuntu16.04系统上跑了,还是蛮欣慰的。 注&…

数据分析案例-印度美食数据可视化分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

alphassl泛域名证书13个月600

AlphaSSL是GlobalSign旗下的数字证书品牌,它主要视为客户提供两种入门级的SSL证书——DV单域名以及泛域名SSL证书。这两种SSL证书一种可以保护www和两个域名记录,或者单个子域名激励;另一种可以同时保护多个域名记录,满足了大部分…

Django视图Views

Views视图 HttpRequest 和HttpResponse Django中的视图主要用来接受web请求,并做出响应。视图的本质就是一个Python中的函数视图的响应分为两大类 1)以Json数据形式返回(JsonResponse) 2)以网页的形式返回 2.1)重定向到另一个网页 (HttpRe…

计算机组成原理(超详解!!) 第九节 外围设备

1.外围设备概述 1.外围设备的一般功能 外围设备的定义:这个术语涉及到相当广泛的计算机部件。除了CPU和主存外,计算 机系统的每一部分都可作为一个外围设备来看待。 外围设备的功能:在计算机和其他机器之间,以及计算机与用户之…

C#知识|(实例)大乐透双色球随机选号器项目实现(一)

哈喽,你好啊,我是雷工! 本节学习练习大乐透双色球随机选号器项目的实现,以下为学习笔记。 01 功能需求 当点击【启动】按钮时,号码开始随机变化; 当点击【选择】按钮时,号码停止随机变化,并将选定的号码显示到下方列表; 当点击【清除】按钮时,下方显示列表被清空。…

C# 结合 JavaScript 对 Web 控件进行数据输入验证

目录 关于数据验证 范例运行环境 验证设计 JavaScript 方法 设计 实现 调用示例 C# 方法 设计 实现 调用示例 小结 关于数据验证 在 Web 应用的录入界面,数据验证是一项重要的实现功能,数据验证是指确认 Web 控件输入或选择的数据&#xff…

Microsoft Remote Desktop Beta v10.9.7 Mac微软远程连接工具

Microsoft Remote Desktop Beta 是一种软件应用程序,使用户能够从其设备远程访问基于 Windows 的计算机或虚拟机。它可以在 Windows 和 Mac 操作系统上下载。通过 Microsoft Remote Desktop,用户可以使用远程桌面协议 (RDP) 或 RemoteFX 协议连接到远程桌…

【qt】日历和定时器

日历和定时器 一.Calendar Widget(日历组件)1.日历的基本使用 二.定时器1.定时器的用处2.创建一个定时器3.设置定时器时间间隔4.设置定时器类型5.超时信号6.关联定时器7.启动定时器8.关闭定时器9.定时器要执行功能 三.总结一下: 一.Calendar Widget(日历组件) 1.日…

亚马逊调整退货处理费,卖家如何应对新挑战?

在电子商务领域,退货处理一直是一个重要且复杂的问题。作为全球最大的电子商务平台之一,亚马逊一直在寻求优化退货处理流程,以平衡消费者满意度和运营成本。近日,亚马逊宣布自2024年6月1日起,将对退货处理费收取标准进…