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

python

代码何在?

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

以上是 Python recipe(9): 文件的逐词处理 的全部内容, 来源链接: utcz.com/z/388863.html

回到顶部