2016-11-03 3 views
1

у меня есть исходный файл, который выглядит следующим образом:list.append() строки в цикле

okay \t ADJ \t okay 
apple \t N \t apple 
etc. 

Я пытаюсь отфильтровать 2-й и 3-й столбцов, начиная с буквой и где все строки, содержащие '\', '&', и строка '(unknown)' должна быть исключена. Если я напишу его в новый файл, код работает отлично. Тем не менее, я пытаюсь сохранить целые столбцы как список, кажется, проблема.

Может ли кто-нибудь помочь мне, где ошибка рассуждений?

with open(path_file) as f: 
     for line in f: 
      lemma = [] 
      if re.match('[A-Z]|[a-z]', line): 
       line = line.strip() 
       columns = line.split('\t') 
       pos = columns[1] 
       lemmas = columns[2] 
       lemma.append(lemmas) 
       # print type(lemmas) 
       # type - str 
       if '(unknown)' in lemmas: 
        pass 
       elif '\\' in lemmas: 
        pass 
       elif '&' in lemmas: 
        pass 
       else: 
        lemma.append(lemmas) 
        # outfile.write(str(lemmas) + ':::' + str(pos) + '\n') 

Я использую Python 2.

+0

Не могли бы вы предоставить образец вывода, который вы ожидаете? Не полностью понимайте свой вопрос. – Nurjan

+0

, поэтому вывод, который я ожидаю, представляет собой список со всеми словами из третьего столбца, например. Это будет так: lemma = ['okay', 'apple' и т. Д.]. Однако, если я запустил его, в конце список содержит всего одно слово. Я думаю, этот код просто обновляет списки и не «добавляет» слова во время каждой итерации. Я думаю, что это связано с типами и самой итерацией, но я не могу понять, где я совершил ошибку. – dkons2321

ответ

0

Я попытался запустить свой код. В этом примере ввод работает.

with open(path_file, 'r') as f: 
    lemma = [] 
    for line in f: 
     if re.match('[A-Z]|[a-z]', line): 
      line = line.strip() 
      print('line:', line) 
      columns = line.split('\\t') 
      pos = columns[1] 
      lemmas = columns[2] 
      lemma.append(lemmas.strip()) 
      # type - str 
      if '(unknown)' in lemmas: 
       pass 
      elif '\\' in lemmas: 
       pass 
      elif '&' in lemmas: 
       pass 
#   else: 
#    lemma.append(lemmas) 
       # outfile.write(str(lemmas) + ':::' + str(pos) + '\n') 
    print(lemma) 

Вы должны поместить lemma список выше для цикла, потому что вы реинициализировать как пустой список во время каждой итерации, то есть новая строка входного файла.

Затем я прокомментировал заявление else.

Также я поставил \\t вместо \t в методе split.

Надеюсь, это поможет.

+0

Ты замечательный, он делает то, что нужно сейчас, спасибо! – dkons2321

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