Python 地址解析器
本文将向您展示如何使用 Python 解析地址。 我们将使用 pyparsing 库手动解析地址,并使用函数或 pyparsing 获取 CSV 文件中的地址。
我们将从一个简单的示例开始,然后转向一个复杂的示例。
使用 Python 库 PyParsing 解析地址
众所周知,Python 编程语言的 pyparsing 模块是对文本数据执行操作的宝贵工具。
用于解析和修改文本数据的 pyparsing 包简化了对地址的处理。 这是因为该模块可以转换并帮助解析地址。
在本文中,我们将讨论 PyParsing 模块用于处理解析和修改的用法。 让我们看一个使用 PyParsing 模块解析地址的真实示例。
之后,我们将查看一个更广泛的示例来演示如何使用 PyParsing 来更改和解析地址数据。
使用 PyParsing 进行简单的地址解析
让我们首先看一个在 Python 库 PyParsing 的帮助下解析地址的基本示例。 作为第一个例子,让我们看看下面的地址并解析它。
567 Main Street
请按照以下步骤解析此地址:
-
导入pyparsing库
首先,我们将通过提及 * 导入 pyparsing 库及其所有模块和函数。
from pyparsing import *
-
创建一个变量
现在我们将创建一个变量并将其分配给我们要解析的地址。
address = "567 Main Street"
-
分解
现在我们将通过提及 nums 和 alphas 来分解地址部分。
addressParser = Word(nums) + Word(alphas) + Word(alphas)
-
现在我们将创建一个变量并从库 pyparsing 中调用 parseString。
addressParts = addressParser.parseString(address)
-
打印
最后,我们将打印变量并查看结果。
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 但允许您用您选择的其他标记替换标记。
在 Python 中使用 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 = Word(alphanums)('key')
我们想从 CSV 文件的输出中删除 = 符号。 我们将使用抑制功能。
equals = Suppress('=')
现在,我们将为值部分创建一个变量。 同样,我们会提到字母数字,因为地址数据集可以包含字母和数字。
value = Word(alphanums)('value')
现在,我们将创建另一个变量来连接变量。
keyValueExpression = key + equals + value
现在我们将使用文件格式打开地址的 CSV 文件。 并使用 file.read 函数读取文件中的每个数据。
with open('/address.csv') as address_file:
address_file = address_file.read()
在此之后,我们将使用带有 scanString 函数或 pyparsing 的 for 循环来逐行读取地址的每一行。
for adrs in keyValueExpression.scanString(address_file):
result = adrs[0]
最后,我们将使用打印功能来查看结果。
print("{0} is {1}".format(result.key, result.value))
我们的代码到此结束,现在我们将编写完整的代码来运行它。 并查看当我们提供包含地址的 CSV 文件时会得到什么输出。
#import library
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 提供了一种比正则表达式更强大、更成熟的替代方法。
例如,嵌套字段对于 PyParsing 没有问题,但它们对于正则表达式来说是问题。 这个解析器更像是旧的备用工具,如 lex 和 yacc。
换句话说,正则表达式可用于搜索标签和从 HTML 中提取数据,但它们不能用于验证 HTML 文件。 然而,pyparsing 可以让你完成这个。
我们希望您发现本文有助于理解 Python 中使用的地址解析器。
相关文章
使用 Python 列出串口
发布时间:2023/06/19 浏览次数:53 分类:Python
-
在本文中,我们将讨论使用串口或 com 端口的通信。 我们将深入探索 Python 包,以帮助我们获得系统的可用通信端口。
在 Python 中解析 ISO 8601 日期
发布时间:2023/06/18 浏览次数:121 分类:Python
-
我们将讨论典型的 ISO 8601 日期的结构,并向您展示如何将典型的 DateTime 对象解析为可以在所有地方使用的标准化 DateTime。ISO 8601 日期的结构
在 Python 中安装 Egg 文件
发布时间:2023/06/18 浏览次数:92 分类:Python
-
在本文中,我们将讨论如何在 Python 中安装 egg 文件,以及可用于实现此操作的工具。使用 setuptools 在 Python 中安装 egg 文件
使用 Python 获取 Redis 数据库中的所有键
发布时间:2023/06/18 浏览次数:127 分类:Python
-
本文将讨论如何使用Python获取 Redis 数据库中的所有键。使用 keys() 获取 Redis 数据库中的所有键 要使用 redis,我们需要安装它; 您可以查看 Redis 下载页面以了解操作方法。
修复 Python 中的 NLTK 词干异常
发布时间:2023/06/18 浏览次数:182 分类:Python
-
在 Python 中,我们可以借助 Python 的 NLTK 库提供的各种模块来完成此操作,但有时,您可能无法获得预期的结果。 本文将讨论为什么会出现这种差异,以及如何解决这些差异以获得我们想要的词
使用 Jython 在 Java 中运行 Python
发布时间:2023/06/18 浏览次数:118 分类:Python
-
本文将彻底解释使用 Jython 库在 Java 程序中运行 Python 的步骤。 这将是一个包含大量图像的详细分步过程,因此您不必担心“他是怎么做到的”。
Python 图像压缩
发布时间:2023/06/18 浏览次数:157 分类:Python
-
本篇文章将介绍使用 Python 中的 PIL 库压缩图像。在使用 PIL 库之前,请使用 pip 或 python 安装它。pip install Pillow
在 Python 中调整图像大小同时保持其纵横比
发布时间:2023/06/18 浏览次数:187 分类:Python
-
这篇 Python 文章的目的是解释我们如何在 Python 中调整图像大小同时保持其纵横比。 在 Python 中调整图像大小的方法还将通过适当的示例程序描述其用法。在 Python 中调整图像大小同时保持其纵横
Python类相等检查
发布时间:2023/06/18 浏览次数:131 分类:Python
-
本文讨论如何在 Python 中检查类相等性。 为此,本文讨论了如何在 Python 类中实现 eq() 方法。