python中的文本处理1 草稿


章节1: python基础

这章讨论了python的一些在文本处理的时候经常会用到的特性。对于那些还未“python入门”的读者来说,<http://python.org/doc/current/tut/tut.html>是一个好的选择。然而这里并不想过多的设计这些,比起python语言本身,我们更着重在文本处理上。

在1.1部分,我会描述一些来自python自身的文本处理技术,但是显然这对于python刚刚入门的人来说并不适合。(有时候甚至对于中级的python使用者也是如此)在强调一遍我们着重在python文本处理的部分的一些编程技术,python里另外一些同样有趣但是和文本处理无关的特性将不会被讨论。

在1.2部分,我会讨论下python标准库里的一些模块,在你自己的文本处理应用中,你很可能也会用到它们(反之,python标准库里面的其他在文本处理中不会用到的模块也将不会被讨论,相关的讨论请见python标准库的文档)。

1.1 技术和模式

topic:使用higher-order函数

  (不要害怕,你可能没有听过这个所谓的higher-order的函数,事实上对于一些有经验的python程序员,所谓的higher-order函数对他们也是不熟悉的,但是函数式编程你应该听说过吧,不熟悉没关系,反正后文没有他你也能看懂,本文的最后会详细的解释函数式编程和这个higher-order函数的)

在文本处理中,我们面对的其实就是一堆一堆同质的文字,通常他们都是通过换行符分割开来成为一行一行的形式。通常一些距离紧密的词语和语块意思上也更加紧密。python提供了标准的按行来读取文件内容的模块。另一个假设是:文本的每一行通常自然地包含一个信息块。

  下面是一个读取文件内容,并选出符合条件‘isCond()’的那些行。

  

  selected = [] # temp list to hold matches
  fp = open(filename):
  for line in fp.readlines(): # Py2.2 -> "for line in fp:"
    if isCond(line): # (2.2 version reads lazily)
      selected.append(line)
  del line # Cleanup transient variable

  

  好了,这段程序没有什么错,但是我总是觉得它变扭,程序要一遍又一遍的循环,通过条件判断,那个变量line被一遍又一遍的赋值,事实上我们其实并没有必要这么干,如果按照函数式编程的方法,下面的这段程序可能更好些:

  selected = filter(isCond, open(filename).readlines())

  没错,就这一句就完了,哈哈,怎么样够节俭吧,省得敲了多少代码。。。

  再考虑的具体一些,假设文本处理的对象是一个log文件。(对,就是大家脑袋里想象出来的那个)几乎所有的程序都能产生log文件,例如造成系统崩溃的系统log,或者那些需要长期运行的,间歇性的产生log的数据库。在我们的例子中,pythonlabs 的windows安装版在安装的时候产生了install.log,它记录了在安装过程中所发生的。下面是一个例子:

#------------ INSTALL.LOG sample data file --------------#
Title: Python 2.2
Source: C:\DOWNLOAD\PYTHON-2.2.EXE | 02-23-2002 | 01:40:54 | 7074248
Made Dir: D:\Python22
File Copy: D:\Python22\UNWISE.EXE | 05-24-2001 | 12:59:30 | | ...
RegDB Key: Software\Microsoft\Windows\CurrentVersion\Uninstall\Py...
RegDB Val: Python 2.2
File Copy: D:\Python22\w9xpopen.exe | 12-21-2001 | 12:22:34 | | ...
Made Dir: D:\PYTHON22\DLLs
File Overwrite: C:\WINDOWS\SYSTEM\MSVCRT.DLL | | | | 295000 | 770c8856
RegDB Root: 2
RegDB Key: Software\Microsoft\Windows\CurrentVersion\App Paths\Py...
RegDB Val: D:\PYTHON22\Python.exe
Shell Link: C:\WINDOWS\Start Menu\Programs\Python 2.2\Uninstall Py...
Link Info: D:\Python22\UNWISE.EXE | D:\PYTHON22 | | 0 | 1 | 0 |
Shell Link: C:\WINDOWS\Start Menu\Programs\Python 2.2\Python ...
Link Info: D:\Python22\python.exe | D:\PYTHON22 | D:\PYTHON22\...

  你看一看出每一条记录都是几种行为中的一种,一个处理程序可能会根据不用行为而做出不同的反应,使用布尔函数,甄别出记录所对应的行为类型是很容易的:

def isFileCopy(line):
return line[:10]=='File Copy:' # or line.startswith(...)
def isFileOverwrite(line):
return line[:15]=='File Overwrite:'

(未完待续)

优质内容筛选与推荐>>
1、ef core code frist
2、【t034】Matrix67的派对
3、git master 回滚代码
4、django字段查询参数及聚合函数
5、网页播放器的参数含义


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号