2016-09-19 3 views
1

В приведенном ниже коде приведены слова, которые начинаются/заканчиваются определенным префиксом/суффиксом.найти все слова в списке/файле, которые начинаются/заканчиваются конкретным префиксом/суффиксом

string_list = [line.strip() for line in open("file.txt", 'r')] 
for word in string_list: 
    if word[-1] == "a": 
     print word 


string_list = [line.strip() for line in open("file.txt", 'r')] 
for word in string_list: 
    if word[0] == "fi": 
     print word 

Как я могу оптимизировать его, чтобы быть быстрым на огромных данных. также, как я могу передать, как

параметров
python test.py --prefix fi 
python test.py --suffix o 

Спасибо заранее.

+0

Посмотрите на [argparse] (https://docs.python.org/3/library/argparse.html) для прохождения параметров –

+2

Возможно, вы захотите опубликовать это на [codereview] (http://codereview.stackexchange.com). –

+0

Как использовать оба sys.argv [], а также argparse? –

ответ

2

Если word - это строка, то word[0] == "fi" не делает то, что вы думаете.

Вы можете использовать вместо startswith и endswith для проверки multicharacter суффиксов и префиксов.

string_list = open("file.txt", 'r') 

for word in string_list: 
    if word.startswith("fi") or word.endswith('a'): 
     print word 

Чтобы передать суффикс/префикс в качестве параметра вашего сценария, взгляните на argparse

+0

Я обновил его до x = filter (lambda s: s.startswith ("fi"), string_list) –

+0

как использовать как sys.argv [] так и argparse? –

0

Если вам нужна скорость, то вы могли бы просто использовать GREP, который написан на низкоуровневой языке и он должен быть быстрее, чем цикл python, с помощью прыжков и ограничений.

Это также портативный и работает просто отлично на Linux/Windows/OSX/...

+0

grep может быть быстрее, но я хочу быть достаточно быстрым, используя py –