2016-04-08 3 views
0

Пытается читать только слова, содержащие алфавитный контент из файла и вставлять их в список.Игнорировать специальные символы в файле.

def readWords(x,y): 
    with open(x,'r') as f: 
     for line in f: 
      for word in line.split(): 
       y.append(word) 

firstFile = sys.argv[1] 
firstList = [] 
readWords(firstFile, firstList) 

Пример файла:

car */ /*one lemon grass 
food accelerate 

Как изменить это читать каждое слово, за исключением специальных символов (только алфавитного содержание, без каких-либо знаков пунктуации или цифр)? то есть конечный результат являются:

[car, one, lemon, grass, food, accelerate] 
+1

Regex бы лучше здесь. Вы можете использовать условие '\ s' для захвата специальных символов. – Adib

+2

@Adib '\ s' захватывает пробелы. –

+0

@Scherf Какие персонажи для вас особенные? –

ответ

2

Простейшее решение, которое фильтрует пространство и специальные символы:

filter(None,re.split(r'\W|\d', bleh)) 

Regex

Регулярное выражение выражение '\ W' в основном означает 'поймать' любой не-словные символы, а \ d означает, что вы хотите поймать числовые символы. Так что если у вас есть такое слово, как:

банан "* # 12312 Сахар

Это поймает полные символы без слов:

" * # 12312

Функция разделения функций Regex

Этот код:

re.split(r'\W|\d', bleh) 

Сходно расколоть, что вы использовали, за исключением того, что это круто, потому что это регулярное выражение с приводом, который дает вам некоторые удивительные возможности.

Фильтр Функция

буквально фильтрует список из вещи вы не хотите. Так, в этом коде, где Foo является список, где Foo = [ "A", "B", "", "D"]:

filter(None,foo) 

Это в основном выглядит внутри списка и найти экземпляры ' None "и поп/удалить его из списка.

Полный код:

import re 
bleh = """"car */12314 34234 /*one 123123lemon grass 
food accelerate 
""" 
print filter(None,re.split(r'\W|\d', bleh)) 

Результат:

['car', 'one', 'lemon', 'grass', 'food', 'accelerate'] 

с кодом

import re 
def readWords(x,y): 
    with open(x,'r') as f: 
     for line in f: 
      //Append to y 
      y += filter(None,re.split(r'\W|\d', line)) 

firstFile = sys.argv[1] 
firstList = [] 
readWords(firstFile, firstList) 
+1

Я бы разделил на '\ W +', чтобы уменьшить количество совпадений – user3159253

+0

@ user3159253 Хорошая рекомендация! – Adib

+1

Кажется, что каждое слово обернуто в свой список? Кроме того, тестирование в другом файле не предотвращает чтение цифр. Получение результатов, таких как ['21333'] – Scherf

Смежные вопросы