Python recipe(9): 文件的逐词处理

代码何在?

div css xhtml xml Example Source Code Example Source Code [http://www.cnblogs.com/tomsheep/]
'''
Created on 2010-5-22

@author: lk
'''
import re

def printIt(word):
    print word,

#process a file word by word    
def word_by_word1(filename, doIt=printIt):
    for line in open(filename):
        for word in line.split():
            doIt(word)

#regex
def word_by_word2(filename,doIt=printIt):
    regex = re.compile(r'[\w-]+')
    for line in open(filename):
        for word in regex.findall(line):
            doIt(word)

#generator
def word_of_file(filename):
    for line in open(filename):
        for word in line.split():
            yield word

def word_by_word3(filename, doIt=printIt):
    for word in word_of_file(filename):
        doIt(word)
if __name__ == '__main__':
    word_by_word1("test.txt")
    print 
    word_by_word2("test.txt")
    print
    word_by_word3("test.txt")

以上代码改写自Python Cookbook 4-8

概述:

    逐词处理给定文件。提供三种方法实现。第一种比较naive,并且假设了“单词”是由空格分隔的;第二种用正则表达式自定义“单词”的形式,更具有灵活性;第三种则使用了generator,将单词的产生和处理逻辑分开,结构更好。

代码说明:

1.Regex对象的findall函数,返回一个list,每个元素都是给定字符串中该正则表达式的匹配

2.yield语句:python引入generator机制,具有记忆功能,当你调用一次generator时,generator会执行,直到yield出现,把yield的参数返回;当下一次调用generator时,它会从上一次的状态开始运行……直到退出。

用法可参考:Python yield用法

更多Interator和Generator:Python Interator与Generator

posted on 2010-05-22 20:58  tomsheep  阅读(504)  评论(0编辑  收藏  举报

导航