更快地查找文本文件中的所有单词

时间:2017-11-10 16:25:20

标签: python isalpha

我编写了一个实用程序,用于扫描包含字母字符的所有空格分隔字段的文本文件,它工作得很好,但速度非常慢,因为我将每行分成单词并扫描每个单词,是否有更快的方法来执行此操作?

感谢。

以下是代码:

#!/bin/python
import argparse
import sys
import time

parser = argparse.ArgumentParser(description='Find all alpha characters in 
an input file')
parser.add_argument('file', type=argparse.FileType('r'), 
help='filename.txt')

args = parser.parse_args()

def letters(input):
    output = []
    for character in input:
        if character.isalpha():
            output = input
    return output

def main(argv):

    start = time.time()
    fname = sys.argv[1]

    f = open(fname)
    for line in f:
        words = line.rstrip().split()
        for word in words:
            alphaWord = letters(word)
            if alphaWord:
                print(alphaWord)
    f.close()

    end = time.time()
    elapsed = end - start
    print "%s secs elapsed" % elapsed

if __name__ == "__main__":
    main(sys.argv)

2 个答案:

答案 0 :(得分:5)

您的程序在letters()中有错误:

def letters(input):
    output = []
    for character in input:
        if character.isalpha():
            output = input # after we get here we'll keep iterating
                           # even though the result will not change
    return output

你正在做的是迭代所有字母,即使其中一个字母是字母数字,你也可以将输入保存到output但是你还要继续迭代其余的字母。字符 - 不添加任何内容。

您要检查所有字符(然后程序返回错误的结果),或者,如果程序返回正确的结果,您可能希望在break之后output = input。< / p>

答案 1 :(得分:0)

for character in input:
   if character.isalpha(): 
         output = input 
   return output

这不会返回它只返回一个字母的单词,因为它不会添加到数组

即使确实返回了一个单词,它也会从单词中删除数字,所以如果你有类似“12ab34”的东西,它仍然会把它算作一个单词,但如果这是你的意图那么它很好