【问题标题】:list.append() of strings in a looplist.append() 循环中的字符串
【发布时间】:2017-03-16 20:21:06
【问题描述】:

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

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。

【问题讨论】:

  • 您能否给出您期望的示例输出?不完全理解您的问题。
  • 所以我期望的输出是一个列表,其中包含第三列中的所有单词。就像这样:引理 = ['okay', 'apple' etc]。但是,如果我运行它,最后,列表只包含 1 个单词。我猜,这段代码只是更新列表,并没有在每次迭代期间“附加”单词。我认为这与类型和迭代本身有关,但我不知道我在哪里犯了错误。

标签: string list loops types


【解决方案1】:

我试图运行你的代码。使用该示例输入即可。

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 声明。

我还在split 方法中输入了\\t 而不是\t

希望这会有所帮助。

【讨论】:

  • 你太棒了,它完成了现在需要做的事情,谢谢!
猜你喜欢
  • 2022-08-17
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
相关资源
最近更新 更多