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

这篇具有很好参考价值的文章主要介绍了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 中使用的地址解析器有帮助。文章来源地址https://www.toymoban.com/news/detail-712145.html

到了这里,关于Python用于解析和修改文本数据-pyparsing模块教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [C++项目] Boost文档 站内搜索引擎(2): 文档文本解析模块parser的实现、如何对文档文件去标签、如何获取文档标题...

    在上一篇文章中, 已经从 Boost 官网获取了 Boost 库的源码. 相关文章: 🫦[C++项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍… 接下来就要编写代码了. 不过还需要做一些准备工作. 创建项目目录 所有的项目文件肯定要在一个目录下, 找一个位置执行下

    2024年02月14日
    浏览(36)
  • uni-app-微信小程序实现markdown文本解析、数学公式解析超详细教程

    在做AI问答功能,文本返回的是markdown形式,如果没有对Markdown文本进行转换很难看,如下图,转换后是不是很好了很多,特别是代码内容阅读起来舒服多了。 下面来介绍下,我在开发小程序 软件聚导航 AI助手对实现Markdown文本解析,看到两款较好的组件,其中第二款towxml组件

    2024年02月03日
    浏览(43)
  • 微信小程序 - 修改多行文本输入框 placeholder 属性换行显示文字样式的详细教程

    多行文本输入框是微信小程序中常用的组件之一,而placeholder属性则用于在输入框中显示提示文本。然而,默认情况下,placeholder属性中的文字无法实现换行显示,这可能会导致在一些情况下显示不完整或不够明确。在本篇教程中,我将详细介绍如何修改多行文本输入框的pl

    2024年02月03日
    浏览(35)
  • 【python 的各种模块】(9) 在python使用PIL( 即pillow模块 ) 修改图片

    目录 1 导入PIL模块(pillow) 1.1 PIL的全称:Python Imaging Library 1.2 导入PIL模块 1.2.1 可用的导入形式 1.2.2 常用的导入形式 1.2.3 PIL下面的常用子模块 2 PIL.Image的方法 (读入,生成和显示图片) 2.1 用 PIL.Image.open() 可以读入图片 2.1.1 基础语法 PIL.Image.open(path) 2.1.2 PIL.Image.open() 方法是

    2024年01月16日
    浏览(33)
  • 如何使用NLP库解析Python中的文本

    Python是一种强大的面向对象的编程(object-oriented programming,OOP)语言,在人工智能领域有着广泛的用途。正是鉴于其实用性,以Google为首的大型科技公司,已经对其开发了Tensorflow等代码库,帮助人们利用强大的机器学习算法与模型,来实现各种应用目的,其中不乏各种“手语

    2024年02月11日
    浏览(29)
  • C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析

    数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量。 要创建数组,请定义数据类型(例如 int )并指定数组名称,后面跟着方括号 [] 。 要将值插入其中,请使用逗号分隔的列表,并在花括号内使用: 现在我们已经创建了一个变量,其中包含一个包含四个

    2024年02月03日
    浏览(39)
  • Python的shutil模块解析

    目录 前言 一、文件复制 1. shutil.copy(src, dst) 2. shutil.copyfile(src, dst) 3. shutil.copy2(src, dst) 4. shutil.copyfileobj(fsrc, fdst,[length=*]) 5. shutil.copymode(src, dst) 6. shutil.copystat(src, dst) 7. shutil.copytree(src, dst,ignore=none,copy_function=shutil.copy2) 二、文件移动和删除 1. shutil.move(src,dst) 2. shutil.rmtree(s

    2024年02月10日
    浏览(28)
  • 【python模块】python解析json文件详解

    JSON(Java Script Object Notation)是一种通常用于以不会“对系统造成负担”的方式传输数据(主要通过 API)的格式。基本原理是利用文本来记录数据点,并将数据点传输给第三方。 JSON是一种使用文本存储数据对象的格式。换句话说,它是一种数据结构,将对象用 文本形式 表示出

    2024年02月08日
    浏览(33)
  • 第44章 SQL 用于各种数据库的数据类型教程

    Microsoft Access、MySQL 和 SQL Server 所使用的数据类型和范围。 数据类型 描述 存储 Text 用于文本或文本与数字的组合。最多 255 个字符。 Memo Memo 用于更大数量的文本。最多存储 65,536 个字符。 注释: 无法对 memo 字段进行排序。不过它们是可搜索的。 Byte 允许 0 到 255 的数字。

    2024年02月06日
    浏览(45)
  • 生成用于目标检测任务的合成图像教程:使用Blender、Python和3D资产

    生成用于目标检测任务的合成图像教程:使用Blender、Python和3D资产 缺少足够的训练数据是当前深度学习面临的一个主要问题。自动生成带有注释的合成图像是计算机视觉任务的一个有前途的解决方案。本文将首先概述合成图像数据的一些图像生成技术,然后生成一个无需手动

    2024年03月27日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包