2015-02-12 2 views
0

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

sentence=='"____ __,_____________.._____________________" 

Я сначала создать функцию, которая видит, странный характер и если это правда, мы игнорируем эту фразу:

def underscore_filter(s): 
     return "____ __," in s 

    filter_fn_list = [underscore_filter] 

    for fn in filter_fn_list: 
     if fn(sentence): 
      filter_match = True 
      break 
     if filter_match == True: 
      continue 

Так на самом деле проблема лежит только с функцией части:

def underscore_filter(s): 
    return "____ __," in s 

Я просто не понимаю, что, несмотря на то, что в моей функции был возвращен тот же шаблон подчеркивания, выход для этой функции, когда я вызываю ее, всегда является ложным. Что не так, и как я могу переписать этот код? Мне все еще нужно, чтобы он был в таком же формате.

Я добавил «продолжить» в конце, потому что мой код действительно просматривает строки CSV-файла. Если строка содержит странные символы, я пропущу эту строку.

+0

Ваш отступа немного запутано , Это может быть артефакт для определения рендерера уценки на StackOverflow, или вы можете смешивать пространства и вкладки (не делайте этого ... запускайте с помощью 'python -t yourscript.py', чтобы получить предупреждение об этой проблеме). В любом случае код, который вы опубликовали, кажется подозрительным. 'filter_fn_list = [underscore_filter (s)]' будет либо '[True]', либо '[False]' (в зависимости от 's'), который не совпадает с его использованием позже ... Фактически, с этим код, я бы ожидал исключения какого-то рода ... – mgilson

+0

Кстати, в соответствии с вашим кодом 'if filter_match == True: continue' совершенно не нужно. – ozgur

+1

Почему символы подчеркивания weird? Справедливости ради, они, вероятно, так думают. – tripleee

ответ

0

Вы можете осуществить это с помощью lambda.

def underscore_filter(s): 
    return "____ __," in s 

filter_match = False 
sentence = "____ __,_____________.._____________________" 

filter_fn_list = [ lambda s:underscore_filter(s) ] 

for fn in filter_fn_list: 
    if fn(sentence): 
     filter_match = True 
     break 

print filter_match 

Кстати, я не понимаю, почему вы добавили continue участие в цикле, на мой взгляд, это совершенно не нужно, так что я просто бросил ее.

0

Я думаю, что проблема эта линия:

filter_fn_list=[underscore_filter(s)] 

Что он делает, что он возвращает истину или ложь в filter_fn_list. Однако, я думаю, вы хотите составить список функций, которые вы можете назвать позже в цикле. Таким образом, вы должны сделать:

filter_fn_list=[underscore_filter] 
+0

да на самом деле в моем коде нет (-ов). – jxn

0

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

# list of sentences we want to filter 
sentences = ["abcd", "a____ __,", "sdf", "ghke_______kh"] 

# list of patterns we want to filter out 
bad_patterns = ["____ __,", "_______"] 

# perform the filtering 
filtered_sentences = [s for s in sentences 
    if not any(pattern in s for pattern in bad_patterns)] 

Печать получившийся filtered_sentences список производит этот вывод:

[ 'ABCD', 'SDF']

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