Python用于解析和修改文本数据-pyparsing模块教程

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: Python用于解析和修改文本数据-pyparsing模块教程

Python库解析地址PyParsing

人们普遍认为,Python编程语言的pyparsing 模块是对文本数据进行操作的一个宝贵工具。

用于解析和修改文本数据的pyparsing 包,简化了对地址的操作。这是因为该模块可以转换和帮助解析地址。

在这篇文章中,我们将讨论PyParsing 模块在处理解析以及修改时的用法。让我们看看一个使用PyParsing 模块解析地址的真实例子。

之后,我们将看一个更广泛的例子,以证明PyParsing 如何被用来改变和解析地址数据。

用简单的地址解析PyParsing

让我们首先看看在Python库PyParsing 的帮助下解析地址的一个基本例子。作为第一个例子,让我们看一下下面的地址并对其进行解析。

567 Main Street

按照这些步骤来解析这个地址:

1.导入pyparsing 库

首先,我们将通过提及* 来导入pyparsing 库及其所有的模块和函数。

from pyparsing import *

2.创建一个变量

现在我们将创建一个变量,并将其分配给我们要解析的地址。

address = "567 Main Street"

3.分解

现在我们将通过提及nums 和alphas 来分解地址部分。

addressParser = Word(nums) + Word(alphas) + Word(alphas)

现在我们将创建一个变量并从库pyparsing 中调用parseString 。

addressParts = addressParser.parseString(address)

4.打印

最后,我们将打印该变量并查看结果。

print(addressParts)

让我们写下整个代码并运行它来看看结果。

from pyparsing import *
address = "123 Main Street FL"
addressParser = Word(nums) + Word(alphas) + Word(alphas) + Word(alphas)
addressParts = addressParser.parseString(address)
print(addressParts)

输出:

['123', 'Main', 'Street', 'FL']

这段代码将把地址解析成四个部分:街道号码、街道名称、街道类型和地址所在的州。

街道号码将是第一部分,街道名称将是第二部分,街道类型将是第三部分,而州将是最后一部分。

四个有用的功能PyParsing

我们可以使用四个可用的函数之一来进行实际解析。

  • ParseString – 通过parseString ,你可以从头开始解析文本,而不必担心结尾的不必要的内容。
  • ScanString – ScanString 搜索输入字符串中的匹配词,有点像re.finditer() 。
  • SearchString – SearchString 与scanString 相似,只是它不返回单个标记,而是提供一个标记的集合。
  • TransformString – TransformString 类似于scanString ,但允许你用你选择的其他标记代替。

用PyParsing 从CSV文件解析地址

地址信息是CSV文件中经常记录的一个特定数据。因为它们在结构上有很大的不同,所以可能很难解析。

pyparsing 模块使用定义的结构简化了从CSV文件中提取地址的过程。首先,让我们为如何正确解析地址定义几个直接的准则和函数。

之后,我们将把这些原则应用于解析含地址的CSV文件。

假设我们的配置文件或地址的CSV文件看起来像这样:

city=LAUDERDALE, state=FL, Zipcode: 33316

我们将不得不以key=value 格式来解析这个字符串。一个KEY=VALUE 字符串有三个部分:键、等号和值。

在解析这样一个表达式的最终输出中包括等号是不必要的。可以使用Suppress() 方法来防止标记被包括在输出中。

代号的名称可以由setResultsName() 函数提供,也可以在构建解析器时将名称作为参数调用解析器,这使得检索特定的代号变得稍微简单明了。令牌最好有与之相关的名称。

让我们试试这段代码,看看pyparsing 如何与CSV文件一起工作。

我们将首先导入pyparsing 库及其所有的函数和模块。

from pyparsing import *

其次,我们将为输入的key 部分创建一个变量,用于输出。我们会提到alphanums ,因为地址的数据集可以包含字母和数字。

key = Word(alphanums)('key')

我们想从CSV文件的输出中删除= 符号。我们将使用Suppress 函数。

equals = Suppress('=')

现在,我们将为value 部分制作一个变量。而且,我们将再次提到alphanums ,因为地址的数据集可以包含字母和数字。

value = Word(alphanums)('value')

现在,我们将创建另一个变量来串联这些变量。

keyValueExpression = key + equals + value

现在我们将使用文件格式化打开我们的CSV地址文件。并使用file.read 函数来读取文件中的每个数据。

with open('/address.csv') as address_file:
  address_file = address_file.read()

在这之后,我们将使用for 循环与scanString 函数或pyparsing 来逐一读取地址的每一行。

for adrs in keyValueExpression.scanString(address_file):
  result = adrs[0]

最后,我们将使用print 函数来查看结果。

print("{0} is {1}".format(result.key, result.value))

我们的代码到此结束,现在我们将写下整个代码来运行它。并看看当我们提供一个带有地址的CSV文件时,我们会得到什么输出。

#import library
#Python小白学习交流群:153708845
from pyparsing import *
key = Word(alphanums)('key')
#delet = from the output
equals = Suppress('=')
value = Word(alphanums)('value')
keyValueExpression = key + equals + value
#use file formating to open csv file
with open('/content/address.csv') as address_file:
  address_file = address_file.read()
#use for loop to read your CSV file
for adrs in keyValueExpression.scanString(address_file):
  result = adrs[0]
#print the output
  print("{0} is {1}".format(result.key, result.value))

输出:

city is LAUDERDALE
state is FL

代码的输出显示了我们的文件所包含的数据。在address.csv 文件中,我们只有一个地址。

而且你可以看到使用pyparsing 库的功能,因为地址被解析了。

PyParsing 在将文本解析为标记并检索或替换单个标记时,”L “提供了一个比正则表达式更强大和成熟的替代方案。

例如,嵌套字段对PyParsing ,但对正则表达式来说是没有问题的。这个分析器更像是老式的备用程序,如lex 和yacc 。

换句话说,正则表达式可以用来搜索标签并从HTML中提取数据,但它们不能用来验证HTML文件。然而,pyparsing 将允许你完成这个任务。

我们希望你觉得这篇文章对理解 Python 中使用的地址解析器有帮助。

相关文章
|
12天前
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
3933 2
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
1天前
|
机器学习/深度学习 自然语言处理 API
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程。通过简单的代码示例,展示如何将文本转换为自然流畅的语音,适用于有声阅读、智能客服等场景。
16 3
|
2天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
13 2
|
9天前
|
XML JavaScript 前端开发
如何解析一个 HTML 文本
【10月更文挑战第23天】在实际应用中,根据具体的需求和场景,我们可以灵活选择解析方法,并结合其他相关技术来实现高效、准确的 HTML 解析。随着网页技术的不断发展,解析 HTML 文本的方法也在不断更新和完善,
|
8天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
91 1
|
9天前
|
测试技术 开发者 Python
深入浅出:Python中的装饰器解析与应用###
【10月更文挑战第22天】 本文将带你走进Python装饰器的世界,揭示其背后的魔法。我们将一起探索装饰器的定义、工作原理、常见用法以及如何自定义装饰器,让你的代码更加简洁高效。无论你是Python新手还是有一定经验的开发者,相信这篇文章都能为你带来新的启发和收获。 ###
9 1
|
9天前
|
设计模式 测试技术 开发者
Python中的装饰器深度解析
【10月更文挑战第24天】在Python的世界中,装饰器是那些能够为函数或类“添彩”的魔法工具。本文将带你深入理解装饰器的概念、工作原理以及如何自定义装饰器,让你的代码更加优雅和高效。
|
8天前
|
JSON 前端开发 JavaScript
API接口商品详情接口数据解析
商品详情接口通常用于提供特定商品的详细信息,这些信息比商品列表接口中的信息更加详细和全面。以下是一个示例的JSON数据格式,用于表示一个商品详情API接口的响应。这个示例假定API返回一个包含商品详细信息的对象。
|
26天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
60 0
|
26天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
49 0