list.append()循环中的字符串

时间:2016-11-03 09:46:27

标签: string list loops types

我有一个如下所示的源文件:

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

我尝试过滤掉第二列和第三列,从一个字母开始,所有行包含' \','&'和字符串'(未知)'应排除在外。如果我把它写到一个新文件,代码工作得很好。但是,我尝试将整列保存为列表,似乎存在问题。

有人可以帮助我推理的错误吗?

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。

1 个答案:

答案 0 :(得分: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列表放在for循环之上,因为在每次迭代期间将其重新初始化为空列表,即输入文件的新行。

然后我评论了else声明。

我还在\\t方法中添加了\t而不是split

希望这有帮助。