`
liudaoru
  • 浏览: 1573869 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

流行的脚本语言Python中的文本处理[z]

阅读更多
From: http://linuxace.cn/program/python/0630/14820.html


  什么是 Python?
  Python 是由 Guido van Rossum 开发的、可免费获得的、非常高级的解释型语言。其语法简单易懂,而其面向对象的语义功能强大(但又灵活)。Python 可以广泛使用并具有高度的可移植性。
  
  字符串 -- 不可改变的序列
  如同大多数高级编程语言一样,变长字符串是 Python 中的基本类型。Python 在“后台”分配内存以保存字符串(或其它值),程序员不必为此操心。Python 还有一些其它高级语言没有的字符串处理功能。
  
  在 Python 中,字符串是“不可改变的序列”。尽管不能“按位置”修改字符串(如字节组),但程序可以引用字符串的元素或子序列,就象使用任何序列一样。Python 使用灵活的“分片”操作来引用子序列,字符片段的格式类似于电子表格中一定范围的行或列。以下交互式会话说明了字符串和字符片段的的用法:
  
  字符串和分片
  >>> s = "mary had a little lamb"
  >>> s[0] # index is zero-based
  'm'
  >>> s[3] = 'x' # changing element in-place fails
  Traceback (innermost last):
   File "", line 1, in ?
  TypeError: object doesn't support item assignment
  >>> s[11:18] # 'slice' a subsequence
  'little '
  >>> s[:4] # empty slice-begin assumes zero
  'mary'
  >>> s[4] # index 4 is not included in slice [:4]
  ' '
  >>> s[5:-5] # can use "from end" index with negatives
  'had a little'
  >>> s[:5]+s[5:] # slice-begin & slice-end are complimentary
  'mary had a little lamb'
  
  另一个功能强大的字符串操作就是简单的 in 关键字。它提供了两个直观有效的构造:
  
  in 关键字
  >>> s = "mary had a little lamb"
  >>> for c in s[11:18]: print c, # print each char in slice
  ...
  l i t t l e
  >>> if 'x' in s: print 'got x' # test for char occurrence
  ...
  >>> if 'y' in s: print 'got y' # test for char occurrence
  ...
  got y
  
  在 Python 中,有几种方法可以构成字符串文字。可以使用单引号或双引号,只要左引号和右引号匹配,常用的还有其它引号的变化形式。如果字符串包含换行符或嵌入引号,三重引号可以很方便地定义这样的字符串,如下例所示:
  
  三重引号的使用
  >>> s2 = """Mary had a little lamb
  ... its fleece was white as snow
  ... and everywhere that Mary went
  ... the lamb was sure to go"""
  >>> print s2
  Mary had a little lamb
  its fleece was white as snow
  and everywhere that Mary went
  the lamb was sure to go
  
  使用单引号或三重引号的字符串前面可以加一个字母 "r" 以表示 Python 不应该解释规则表达式特殊字符。例如:
  
  使用 "r-strings"
  
  >>> s3 = "this and that"
  >>> print s3
  this
  and
  that
  >>> s4 = r"this and that"
  >>> print s4
  this and that
  
  在 "r-strings" 中,可能另外组成换码符的反斜杠被当作是常规反斜杠。在以后的规则表达式讨论中会进一步说明这个话题。
  
  文件和字符串变量
  我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法: .read()、.readline() 和 .readlines()。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。 .read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而 .read() 生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。
  
  .readline() 和 .readlines() 非常相似。它们都在类似于以下的结构中使用:
  
  Python .readlines() 示例
  
      fh = open('c:\autoexec.bat')
  for line in fh.readlines():
   print line
  
  .readline() 和 .readlines() 之间的差异是后者一次读取整个文件,象 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理。另一方面,.readline() 每次只读取一行,通常比 .readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline()。
  
  如果正在使用处理文件的标准模块,可以使用 cStringIO 模块将字符串转换成“虚拟文件”(如果需要生成模块的子类,可以使用 StringIO 模块,初学者未必要这样做)。例如:
  
  cStringIO 模块
  >>> import cStringIO
  >>> fh = cStringIO.StringIO()
  >>> fh.write("mary had a little lamb")
  >>> fh.getvalue()
  'mary had a little lamb'
  >>> fh.seek(5)
  >>> fh.write('ATE')
  >>> fh.getvalue()
  'mary ATE a little lamb'
  
  但是,请记住,cStringIO“虚拟文件”不是永久的,这一点与真正的文件不同。如果不保存它(如将它写入一个真正的文件,或者使用 shelve 模块或数据库),则程序结束时,它将消失。
  
  标准模块:string
  string 模块也许是 Python 1.5.* 标准发行版中最常用的模块。实际上,在 Python 1.6 或更高版本中,string 模块中的功能将作为内置字符串方法(在撰写本文时,详细信息尚未发布)。当然,任何执行文本处理任务的程序也许应该用以下这行开头:
  
  开始使用 string 的方法
  
     import string
  
  一般经验法则告诉我们,如果可以使用 string 模块完成任务,那么那就是正确的方法。与 re(规则表达式)相比,string 函数通常更快速,大多数情况下他们更易于理解和维护。第三方 Python 模块,包括某些用 C 编写的快速模块,适用于专门的任务,但可移植性和熟悉性都建议只要可能就使用 string。如果您习惯于使用其它语言,也会有例外,但不如您想像的那样多。
  
  string 模块包含了几种类型的事物,如函数、方法和类;它还包含了公共常量的字符串。例如:
  
  string 用法例 1
  >>> import string
  >>> string.whitespace
  '1112131415 '
  >>> string.uppercase
  'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  
  虽然可以用手写出这些常量,string 版本或多或少确保了常量对于运行 Python 脚本的国家语言和平台将是正确的。
  
  string 还包括了以常见方式(可以结合这些方式来构成几种罕见的转换)转换字符串的函数。例如:
  
  string 用法例 2
  >>> import string
  >>> s = "mary had a little lamb"
  >>> string.capwords(s)
  'Mary Had A Little Lamb'
  >>> string.replace(s, 'little', 'ferocious')
  'mary had a ferocious lamb'
  
  还有许多没有在这里具体说明的其它转换;可以在 Python 手册中查找详细信息。
  
  还可以使用 string 函数来报告字符串属性,如子串的长度或位置,例如:
  
  string 用法例 3
  >>> import string
  >>> s = "mary had a little lamb"
  >>> string.find(s, 'had')5>>> string.count(s, 'a')4
  
  最后,string 提供了非常 Python 化的奇特事物。.split() 和 .join() 对提供了在字符串和字节组之间转换的迅捷方法,您会发现它们非常有用。用法很简单:
  
  string 用法例 4
  >>> import string>>> s = "mary had a little lamb"
  >>> L = string.split(s)
  >>> L
  ['mary', 'had', 'a', 'little', 'lamb']
  >>> string.join(L, "-")
  'mary-had-a-little-lamb'
  
  当然,除了 .join() 之外,也许会利用列表来做其它事(如某些涉及我们熟悉的 for ... in ... 结构的事情)。
  
  标准模块:re
  re 模块废弃了在老的 Python 代码中使用的 regex 和 regsub 模块。虽然相对于 regex 仍然有几个有限的优点,不过这些优点微不足道,不值得在新代码中使用。过时的模块可能会从未来的 Python 发行版中删除,并且 1.6 版可能有一个改进的接口兼容的 re 模块。所以,规则表达式仍将使用 re 模块。
  
  规则表达式很复杂。也许有人会撰写关于这个主题的书,但实际上,已经有许多人这样做了!本文尝试捕捉规则表达式的“完全形态”,让读者可以掌握它。
  
  规则表达式是一种很简练方法,用于描述可能在文本中出现的模式。是否会出现某些字符?是否按特定顺序出现?子模式是否会重复一定次数?其它子模式是否会排除在匹配之外?从概念上说,似乎不能用自然语言了直观地描述模式。诀窍是使用规则表达式的简洁语法来编码这种描述。
  
  当处理规则表达式时,将它作为它自己的编程问题来处理,即使只涉及一或两行代码;这些行有效地构成了一个小程序。
  
  从最小处着手。从最基本上看,任何规则表达式都涉及匹配特定的“字符类”。最简单的字符类就是单个字符,它在模式中只是一个字。通常,您希望匹配一类字符。可以通过将类括在方括号内来表明这是一个类;在括号中,可以有一组字符或者



分享到:
评论

相关推荐

    tools_python-master.7z

    在IT行业中,Python是一种广泛应用的编程语言,尤其在数据处理、自动化任务以及视频处理等领域表现卓越。本资源"tools_python-master.7z"显然聚焦于使用Python进行短视频的制作,这通常涉及到视频剪辑、合并、添加...

    【Python学习教程】在给定文本文件中显示唯一单词的脚本

    在Python编程中,处理文本文件是一项常见的任务,特别是在分析数据、提取信息或进行自然语言处理时。本教程将教你如何编写一个脚本来读取一个文本文件,并找出其中的唯一单词。这涉及到文件操作、字符串处理以及集合...

    游戏脚本.7z

    如果是Lua或Python等文本格式的脚本,我们可以直接阅读代码;如果是Unity或Unreal Engine等引擎的脚本,可能需要相应的编辑器和知识来理解。分析这些脚本可以帮助我们深入理解游戏的工作原理,甚至对游戏进行修改或...

    基于Python语言的少女前线8-1n双 zas 炸狗与后勤收集脚本设计源码

    该项目是一款基于Python语言的《少女前线》8-1n双 zas 炸狗与后勤收集脚本设计源码,包含68个文件,其中包括58个PNG图片文件、3个TXT文本文件、2个Python源代码文件、1个Git忽略文件、1个LICENSE授权文件、1个...

    EmEditor 很好用的一个文本编辑器可支持多国语言

    同时,它还支持VBS、JScript等脚本语言,用户可以编写自定义脚本来实现更复杂的文本处理任务。 5. **列选择与块编辑**:在EmEditor中,用户可以选择文本的矩形区域,这对于处理表格数据或进行批量替换非常有用。...

    Python简介.7z

    5. 强大的标准库:Python的标准库包含了大量预装模块,覆盖了网络、操作系统接口、文本处理等多个领域。 6. 开源:Python是开源软件,社区活跃,不断有新库和改进出现。 Python的生态: 1. 第三方库:除了标准库,...

    python_json.7z

    在描述中提到的`python_json.7z`压缩包里有两个文件:`test.json`和`json_demo.py`。`test.json`是一个包含JSON数据的文件,而`json_demo.py`是用于读取和解析这些数据的Python脚本。 **一、加载JSON文件** 在...

    python-3.10.1-amd64.exe.7z

    Python 3.10.1 是 Python 语言的最新稳定版本,专为AMD64(也称为x86-64)架构设计,这表明它适用于64位操作系统。这个"python-3.10.1-amd64.exe" 文件是Python的安装程序,以.exe格式封装,方便在Windows系统上进行...

    Python3 高级教程.7z

    在Python中,你可以编写CGI脚本处理HTTP请求,比如接受表单数据、返回动态生成的HTML页面。使用`cgi`模块可以帮助你解析HTTP请求,`http.server`模块可以用来创建简单的HTTP服务器进行测试。 以上只是对Python3高级...

    psd-tool python example

    通过编写Python脚本,我们可以实现自动化处理PSD文件,提取关键信息,甚至创建新的设计元素。而`zzx_checkPSD.py`和`utils.py`的结合使用,可以构建出一个自定义的PSD文件处理系统,根据需求进行各种复杂操作。

    LFD非官方Python模块库zw中文版.7z

    标题中的“LFD非官方Python模块库zw中文版.7z”表明这是一个包含中文版的非官方Python模块库。这个库可能由社区开发者维护,旨在为Python编程提供额外的工具和功能,尤其针对中文环境进行了优化。7z是一种常见的压缩...

    在 Voron 3D 打印机上 测量和显示热行为的 脚本_Python_代码_相关文件_下载

    您需要编辑脚本(请使用一个普通的文本编辑器,例如 Nano,它不会与行尾发生冲突)以包含适合您的打印机的参数。还请填写该META DATA部分 - 这将帮助我们找到跨打印机配置的模式! 热分析 测量龙门偏转和框架扩展 ...

    Python版FAQ

    UnicodeError通常发生在处理文本编码时,当Python试图解码非Unicode字符串但使用的编码不正确时就会引发此错误。解决这个问题的方法是确保所有文本数据都是Unicode格式,或者在处理字符串时明确指定正确的编码。 ...

    Python基础教程(第3版).[挪]Magnus Lie Hetland(书签 )pdf.7z

    Python是一种高级、解释型、交互式和面向对象的脚本语言,其简洁明了的语法特性使得它成为初学者入门编程的理想选择。在本书中,Hetland教授了以下关键知识点: 1. **Python安装与环境**:讲解如何在不同操作系统上...

    Python-Web结课论文.7z

    标题 "Python-Web结课论文.7z" 暗示了这是一份与Python Web开发相关的学术作品,特别提到了使用Django框架来构建一个学生管理系统。在Python的Web开发领域,Django是一个非常流行的高级Web框架,它强调了可重用性和...

    Python教程(原文)(20210930173746).pdf

    内容涉及到Python编程语言的基础知识,包括但不限于以下主题:Python程序的特点、Python解释器的使用、Python库的应用、Python脚本的编写、Python与C/C++的交互、Python的异常处理、Python的I/O操作以及Python在不同...

    python学习笔记

    Python是一种广泛使用的开源编程语言,它由Guido van Rossum于1989年底发起,最初目的是为CWI的Amoeba分布式操作系统创建一种高级的脚本语言。它的命名来源于BBC当时流行的喜剧系列“Monty Python”,这反映在Python...

    python开发Word助手的程序.7z

    Python是一种强大的编程语言,尤其在处理文本操作和自动化任务方面表现突出。开发一个Word助手的程序,可以帮助用户简化日常文档处理工作,例如自动生成报告、格式化文本、数据导入导出等。本项目中,我们将深入探讨...

    python基础篇.pdf

    字符串处理部分特别强调了Unicode编码的支持,这在多语言文本处理中尤为重要。 4. Python的数据结构: 介绍了Python中的列表(List)、元组(Tuple)、字典(Dictionary)等数据结构。列表是可变的序列类型,适用于...

    基于Python语言的网上课件设计源码

    本项目为基于Python语言的网上课件设计源码,包含107个文件,涵盖40个Word文档(docx)、32个PowerPoint演示文稿(pptx)、10个纯文本文件(TXT)、8个Python脚本(py)、3个PDF文件、3个图片文件(jpg)、2个纯文本...

Global site tag (gtag.js) - Google Analytics