本文将向大家展示如何使用 Python 解析地址。 我们将使用 pyparsing 库手动解析地址,并使用函数或 pyparsing 获取 CSV 文件中的地址。
我们将从一个简单的示例开始,然后转向一个复杂的示例。
众所周知,Python 编程语言的 pyparsing 模块是对文本数据执行操作的宝贵工具。
用于解析和修改文本数据的 pyparsing 包简化了对地址的处理。 这是因为该模块可以转换并帮助解析地址。
在本文中,我们将讨论 PyParsing 模块用于处理解析和修改的用法。 让我们看一个使用 PyParsing 模块解析地址的真实示例。
之后,我们将查看一个更广泛的示例来演示如何使用 PyParsing 来更改和解析地址数据。
让我们首先看一个在 Python 库 PyParsing 的帮助下解析地址的基本示例。 作为第一个例子,让我们看看下面的地址并解析它。
567 Main Street
请按照以下步骤解析此地址:
首先,我们将通过提及 * 导入 pyparsing 库及其所有模块和函数。
from pyparsing import *
现在我们将创建一个变量并将其分配给我们要解析的地址。
address = "567 Main Street"
现在我们将通过提及 nums 和 alphas 来分解地址部分。
addressParser = Word(nums) + Word(alphas) + Word(alphas)
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']
此代码会将地址解析为四个部分:街道编号、街道名称、街道类型和地址所在的州。
街道编号是第一部分,街道名称是第二部分,街道类型是第三部分,州是最后一部分。
我们可以使用四个可用函数之一来进行实际的解析。
地址信息是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 中使用的地址解析器。