我编写了一个实用程序,用于扫描包含字母字符的所有空格分隔字段的文本文件,它工作得很好,但速度非常慢,因为我将每行分成单词并扫描每个单词,是否有更快的方法来执行此操作?
感谢。
以下是代码:
#!/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)
答案 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”的东西,它仍然会把它算作一个单词,但如果这是你的意图那么它很好