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")
word_by_word2("test.txt")
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
以上是 Python recipe(9): 文件的逐词处理 的全部内容, 来源链接: utcz.com/z/388863.html