Python recipe(9): 文件的逐词处理
代码何在?
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