首页 > 编程语言 >Python教程‘r’的使用技巧

Python教程‘r’的使用技巧

时间:2024-04-10 11:14:10浏览次数:23  
标签:教程 技巧 Python json raw JSON 原始 斜杠 字符串

嗨,大家好!今天,我们将探讨Python中一个重要但经常被忽视的小技巧'r'。

 

在Python中,r是一个前缀,它用于处理原始字符串(raw strings)。原始字符串与普通字符串不同,它们让你在字符串中使用反斜杠符号\而不必担心它们被解释成转义字符。

为什么要使用原始字符串?

原始字符串在处理正则表达式、文件路径、Windows路径等需要使用反斜杠的情况下非常有用。当你使用普通字符串时,例如"C:\User\Documents",Python会将\U解释为一个Unicode转义字符,而不是文件路径的一部分。

但如果你使用原始字符串,像这样:r"C:\User\Documents",Python将字符串视为字面值,不对\进行任何转义。

让我们来看几个实际的例子

1.正则表达式

正则表达式:在正则表达式中,反斜杠\用于转义特殊字符。使用原始字符串,你可以写更简洁的正则表达式,例如:r"\d{3}-\d{6}" 

代码

import re

# 使用普通字符串

pattern = "\\d{3}-\\d{6}" # 匹配格式为"###-######"的电话号码

text = "Local Phone Number: 027-888888"

match = re.search(pattern, text)

print("普通字符串匹配结果:", match.group() if match else "未找到匹配")

# 使用原始字符串

pattern_raw = r"\d{3}-\d{6}" # 匹配格式为"###-######"的电话号码

match_raw = re.search(pattern_raw, text)

print("原始字符串匹配结果:", match_raw.group() if match_raw else "未找到匹配")

输出

普通字符串匹配结果: 027-888888

原始字符串匹配结果: 027-888888

 

  • 由于反斜杠 \ 在普通Python字符串中也是一个转义字符,因此在正则表达式模式中我们需要写成 "\\d" 而不是 "\d"。

然后,我们在文本字符串 text 中搜索这个模式,如果找到匹配,就打印出匹配的结果。

  • 我们使用了原始字符串,即在模式字符串前面加上 r 前缀。这意味着在模式字符串中,反斜杠 \ 不会被解释为转义字符,所以我们只需要写 \d 而不是 "\\d",使模式更加清晰和简洁。

使用原始字符串可以减少错误并提高可读性,尤其是在处理复杂的正则表达式时。所以,当你需要在正则表达式中包含反斜杠时,使用原始字符串是一个不错的选择。

在上述代码示例中,你会看到两次搜索都会找到匹配,因为文本字符串 text 包含了一个某地的电话号码。使用原始字符串使正则表达式模式更加直观和易于理解。

提示

代码"import re" 是用于导入Python的正则表达式库(re)的语句。

如果你想使用正则表达式来进行文本匹配,包括使用re.search() 函数,那么必须导入这个库(re),因为它包含了与正则表达式相关的函数和类。

2.文件路径

文件路径:如果你需要处理文件路径,使用原始字符串可以避免混淆。例如:path = r"C:\User\Documents\file.txt"

代码

# 使用普通字符串

path_normal = "C:\\User\\Documents\\file.txt"

# 使用原始字符串

path_raw = r"C:\User\Documents\file.txt"

print("普通字符串路径:", path_normal)

print("原始字符串路径:", path_raw)

输出

普通字符串路径: C:\User\Documents\file.txt

原始字符串路径: C:\User\Documents\file.txt

 

当编写文件路径时,经常会涉及到反斜杠 \,因为在Windows系统中,路径通常使用反斜杠来分隔文件夹和文件。在Python字符串中,反斜杠 \ 也被用作转义字符,用于表示特殊字符。这可能会导致一些问题,特别是当你需要在字符串中包含反斜杠时。

r 前缀的主要作用是将一个字符串标记为原始字符串(raw string),这意味着反斜杠 \ 不会被解释为转义字符。这对于处理文件路径非常有用,因为它允许你编写路径而不必担心反斜杠被误解。

代码

# 使用普通字符串

path_normal = "C:\\User\\Documents\\file.txt"

在这行代码中,path_normal 是一个普通字符串,表示文件路径。在这个字符串中,双反斜杠 \\ 用于表示单个反斜杠,因为反斜杠是一个转义字符,所以你需要使用两个反斜杠来表示一个。

代码

# 使用原始字符串

path_raw = r"C:\User\Documents\file.txt"

在这行代码中,path_raw 是一个原始字符串,它使用 r 前缀。这意味着字符串中的反斜杠 \ 不会被解释为转义字符。因此,你只需写单个反斜杠,而不必使用两个。这样做使文件路径更加清晰和易于阅读。

代码

print("普通字符串路径:", path_normal)

print("原始字符串路径:", path_raw)

这两行代码用于打印文件路径。

3.JSON字符串

JSON字符串:有时,你需要在字符串中包含特殊字符,比如\n表示换行。使用原始字符串可以确保这些字符保持原样,例如:json_data = r'{"message": "Hello\nWorld"}'。

代码

import json

# 使用普通字符串,包含转义后的换行

json_data_normal = '{"message": "Hello\\nWorld"}'

# 使用原始字符串,包含转义后的换行

json_data_raw = r'{"message": "Hello\nWorld"}'

parsed_normal = json.loads(json_data_normal)

parsed_raw = json.loads(json_data_raw)

print("普通字符串JSON解析结果:", parsed_normal)

print("原始字符串JSON解析结果:", parsed_raw)

# 创建包含实际的换行的 JSON 数据(使用转义形式)

json_data_actual_newline = '{"message": "Hello\nWorld"}'

# 输出包含实际的换行的 JSON 数据

print("JSON数据(包含实际的换行):", json_data_actual_newline)

输出

普通字符串JSON解析结果: {'message': 'Hello\nWorld'}

原始字符串JSON解析结果: {'message': 'Hello\nWorld'}

JSON数据(包含实际的换行): {"message": "Hello

World"}

 

代码解释

在上面的代码示例中,我们使用了 Python 中的 JSON 模块来处理 JSON 数据,并展示了在 JSON 字符串中 \n 的不进行转义的两种用法:"\\"以及 r 前缀。

  • 首先,我们定义了两个 JSON 数据字符串:json_data_normal 和 json_data_raw。

  • json_data_normal 使用普通字符串,JSON 对象包含了一个没有转义的\n 。

  • json_data_raw 使用原始字符串(r 前缀),JSON 对象同样包含了一个没有转义的 \n 。

  • 我们使用 json.loads() 函数来解析这两个 JSON 数据字符串,并将结果分别存储在 parsed_normal 和 parsed_raw 变量中。

  • 我们输出这两个解析结果。

  • 接下来,我们定义了一个新的 JSON 数据字符串 json_data_actual_newline,这次我们试图在其中包含实际的换行符\n。

  • 最后,我们输出 json_data_actual_newline,它执行了换行操作。

总结

Python中的‘r’前缀是一个强大的工具,让你处理原始字符串时更加轻松,避免了许多常见的转义字符问题。这是每个Python开发者都应该知道的小技巧!

希望可以帮助你。如果你喜欢这个教程,请点赞、分享,并订阅我的专栏以获取更多关于Python和编程的精彩内容。如果你有任何问题或需要更多解释,请在评论中告诉我。谢谢大家的支持,我们下次再见!

标签:教程,技巧,Python,json,raw,JSON,原始,斜杠,字符串
From: https://www.cnblogs.com/fpcbk/p/18125604

相关文章

  • python写的收Udp消息后,再发到 MQTT 的例子
    收到Udp消息后,再发到MQTT的例子完整代码udp2mqtt.pyimportjsonimportloggingimportrandomimportsocketimporttimeimportpaho.mqtt.clientasmqtt_clientBROKER='*******.ala.cn-hangzhou.emqxsl.cn'PORT=8084TOPIC="python-mqtt/wss"CLIEN......
  • Python异步HTTP客户端和服务器功能的底层库之httpcore使用详解
    概要httpcore库是一个提供异步HTTP客户端和服务器功能的底层库,它是许多高级HTTP客户端库的基础,如httpx。httpcore旨在提供一个快速、稳定且易于使用的HTTP组件。安装通过pip可以轻松安装httpcore:pip install httpcore特性异步支持:原生支持异步操作,提高I/O效率。......
  • Python快速构建Web API的利器库之Toapi使用详解
      概要Toapi模块是一个强大的Python库,可以帮助开发者快速构建WebAPI。通过Toapi,开发者可以轻松地将网页内容转换为API接口,实现数据的抓取和解析。本文将介绍Toapi模块的基本用法和功能,以及多种Python案例,帮助读者更好地理解和应用Toapi模块。Toapi模块的基本用法Toap......
  • Python中global和nonlocal关键字的妙用:变量管理技巧
        概要在Python中编写函数时,经常会遇到需要在函数内部访问和修改外部变量的情况。在这种情况下,我们可以使用 global 和 nonlocal 关键字来声明变量的作用域,以便正确地访问和修改这些变量。本文将深入探讨 global 和 nonlocal 的用法,包括详细的示例代码和......
  • python收发Udp消息
    发Udp消息udpSend.pyimportsocket#设置目标地址和端口server_address=('localhost',6789)#创建UDP套接字sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)try:#发送数据message='aaaaaaa'print(f"发送:{message}")se......
  • Python基于Excel数据加以反距离加权空间插值并掩膜图层
      本文介绍基于Python中ArcPy模块,实现Excel数据读取并生成矢量图层,同时进行IDW插值与批量掩膜的方法。1任务需求  首先,我们来明确一下本文所需实现的需求。  现有一个记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数......
  • Python的click库做命令行工作
    需求是MeterSphere测试计划状态是已完成/已结束,测试进度不是100%。排查发现是test_plan_test_case表中已取消关联的用例算在了测试用例总数导致的所以做了一个命令行工具方便其他人处理该问题pythonclick库常用函数详解_click函数-CSDN博客pythonClick库知识点汇总_python......
  • 博客园美化教程
    博客园美化教程前言之前一直想美化博客园,但一直没有找到比较喜欢的主题。最近找到了一个还比较满意的主题,SimpleMemory,特此分享。正文一、申请js权限首先点击这里--->博客后台-博客园(cnblogs.com),来到博客园后台管理页面,点击设置下滑,在基本设置里找到申请js权......
  • 肖sir__接口测试之python+rquest+unittest分层自动化框架
    接口测试之接口po框架一、新建一个项目  接口自动化框架设计实战:第一包:config  案例:#登录接口dl_url='http://cms.duoceshi.cn/cms/manage/loginJump.do'dl_d={'userAccount':'admin','loginPwd':'123456'}dl_h="Content-Type:applic......
  • 论文解读:吴恩达来信AI Agent技巧—利用自我反馈的迭代细化技术
    《自我完善:利用自我反馈的迭代细化技术》https://arxiv.org/pdf/2303.17651.pdf摘要Largelanguagemodels(LLMs)经常无法在一次尝试中生成最佳输出。受人类在修改书面文本时所表现出的迭代精炼过程的启发,我们提出了SELF-REFINE,一种通过迭代反馈和精炼来改进大型语言模......