翼度科技»论坛 编程开发 python 查看内容

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

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
Python库解析地址PyParsing

人们普遍认为,Python编程语言的pyparsing 模块是对文本数据进行操作的一个宝贵工具。
用于解析和修改文本数据的pyparsing 包,简化了对地址的操作。这是因为该模块可以转换和帮助解析地址。
在这篇文章中,我们将讨论PyParsing 模块在处理解析以及修改时的用法。让我们看看一个使用PyParsing 模块解析地址的真实例子。
之后,我们将看一个更广泛的例子,以证明PyParsing 如何被用来改变和解析地址数据。
用简单的地址解析PyParsing

让我们首先看看在Python库PyParsing 的帮助下解析地址的一个基本例子。作为第一个例子,让我们看一下下面的地址并对其进行解析。
  1. 567 Main Street
复制代码
按照这些步骤来解析这个地址:
1.导入pyparsing 库
首先,我们将通过提及* 来导入pyparsing 库及其所有的模块和函数。
  1. from pyparsing import *
复制代码
2.创建一个变量
现在我们将创建一个变量,并将其分配给我们要解析的地址。
  1. address = "567 Main Street"
复制代码
3.分解
现在我们将通过提及nums 和alphas 来分解地址部分。
  1. addressParser = Word(nums) + Word(alphas) + Word(alphas)
复制代码
现在我们将创建一个变量并从库pyparsing 中调用parseString 。
  1. addressParts = addressParser.parseString(address)
复制代码
4.打印
最后,我们将打印该变量并查看结果。
  1. print(addressParts)
复制代码
让我们写下整个代码并运行它来看看结果。
  1. from pyparsing import *
  2. address = "123 Main Street FL"
  3. addressParser = Word(nums) + Word(alphas) + Word(alphas) + Word(alphas)
  4. addressParts = addressParser.parseString(address)
  5. print(addressParts)
复制代码
输出:
  1. ['123', 'Main', 'Street', 'FL']
复制代码
这段代码将把地址解析成四个部分:街道号码、街道名称、街道类型和地址所在的州。
街道号码将是第一部分,街道名称将是第二部分,街道类型将是第三部分,而州将是最后一部分。
四个有用的功能PyParsing

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

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

地址信息是CSV文件中经常记录的一个特定数据。因为它们在结构上有很大的不同,所以可能很难解析。
pyparsing 模块使用定义的结构简化了从CSV文件中提取地址的过程。首先,让我们为如何正确解析地址定义几个直接的准则和函数。
之后,我们将把这些原则应用于解析含地址的CSV文件。
假设我们的配置文件或地址的CSV文件看起来像这样:
  1. city=LAUDERDALE, state=FL, Zipcode: 33316
复制代码
我们将不得不以key=value 格式来解析这个字符串。一个KEY=VALUE 字符串有三个部分:键、等号和值。
在解析这样一个表达式的最终输出中包括等号是不必要的。可以使用Suppress() 方法来防止标记被包括在输出中。
代号的名称可以由setResultsName() 函数提供,也可以在构建解析器时将名称作为参数调用解析器,这使得检索特定的代号变得稍微简单明了。令牌最好有与之相关的名称。
让我们试试这段代码,看看pyparsing 如何与CSV文件一起工作。
我们将首先导入pyparsing 库及其所有的函数和模块。
  1. from pyparsing import *
复制代码
其次,我们将为输入的key 部分创建一个变量,用于输出。我们会提到alphanums ,因为地址的数据集可以包含字母和数字。
  1. key = Word(alphanums)('key')
复制代码
我们想从CSV文件的输出中删除= 符号。我们将使用Suppress 函数。
  1. equals = Suppress('=')
复制代码
现在,我们将为value 部分制作一个变量。而且,我们将再次提到alphanums ,因为地址的数据集可以包含字母和数字。
  1. value = Word(alphanums)('value')
复制代码
现在,我们将创建另一个变量来串联这些变量。
  1. keyValueExpression = key + equals + value
复制代码
现在我们将使用文件格式化打开我们的CSV地址文件。并使用file.read 函数来读取文件中的每个数据。
  1. with open('/address.csv') as address_file:
  2.   address_file = address_file.read()
复制代码
在这之后,我们将使用for 循环与scanString 函数或pyparsing 来逐一读取地址的每一行。
  1. for adrs in keyValueExpression.scanString(address_file):
  2.   result = adrs[0]
复制代码
最后,我们将使用print 函数来查看结果。
  1. print("{0} is {1}".format(result.key, result.value))
复制代码
我们的代码到此结束,现在我们将写下整个代码来运行它。并看看当我们提供一个带有地址的CSV文件时,我们会得到什么输出。
  1. #import library#Python小白学习交流群:153708845from pyparsing import *key = Word(alphanums)('key')#delet = from the outputequals = Suppress('=')value = Word(alphanums)('value')keyValueExpression = key + equals + value#use file formating to open csv filewith open('/content/address.csv') as address_file:  address_file = address_file.read()#use for loop to read your CSV filefor adrs in keyValueExpression.scanString(address_file):
  2.   result = adrs[0]#print the output  print("{0} is {1}".format(result.key, result.value))
复制代码
输出:
  1. city is LAUDERDALE
  2. state is FL
复制代码
代码的输出显示了我们的文件所包含的数据。在address.csv 文件中,我们只有一个地址。
而且你可以看到使用pyparsing 库的功能,因为地址被解析了。
PyParsing 在将文本解析为标记并检索或替换单个标记时,”L “提供了一个比正则表达式更强大和成熟的替代方案。
例如,嵌套字段对PyParsing ,但对正则表达式来说是没有问题的。这个分析器更像是老式的备用程序,如lex 和yacc 。
换句话说,正则表达式可以用来搜索标签并从HTML中提取数据,但它们不能用来验证HTML文件。然而,pyparsing 将允许你完成这个任务。
我们希望你觉得这篇文章对理解 Python 中使用的地址解析器有帮助。

来源:https://www.cnblogs.com/djdjdj123/p/17717654.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具