迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 地址解析器

作者:迹忆客 最近更新:2023/06/19 浏览次数:

本文将向您展示如何使用 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 的四个有用函数

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

  1. ParseString - 使用 parseString,您可以从头开始解析文本,而不必担心最后出现不必要的内容。
  2. ScanString - ScanString 在输入字符串中搜索匹配的词,有点像 re.finditer()。
  3. SearchString - SearchString 类似于 scanString,不同之处在于它不是返回单个标记,而是提供它们的集合。
  4. 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 列出串口

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 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() 方法。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便