【问题标题】:Python csv.reader is printing the last line a second timePython csv.reader 正在第二次打印最后一行
【发布时间】:2019-06-18 11:44:41
【问题描述】:

我有一个 2 列逗号分隔的英语句子文本文件,并将它们翻译成另一种语言,每个翻译对都在新行上,例如

i like cats,me gustan los gatos    
hello,hola

我想打开该文件,然后只获取该对的第二部分(翻译)并获得这些翻译的列表。我已经使用了显示的代码。但是,输出是最后一项总是在列表之后的末尾再次打印,这是我不想要的。

with open('translate_outputs.txt', newline ='') as translations:
    translation_reader = csv.reader(translations, delimiter = ',')
    for translation in translation_reader:
        just_translation = translation[1].lower()
        translation_list = []
        translation_list.append(just_translation)
        print(translation_list)

预期结果:

['me gustan los gatos']  
['hola']

实际结果:

['me gustan los gatos']  
['hola']  
hola

【问题讨论】:

  • 你确定后面的代码中没有打印吗?你可能在循环结束后的某处打印just_translation
  • 正如最后一条评论所暗示的,您显示的代码不会产生您显示的输出。请向我们展示完整的实际代码或当前代码的实际输出。阅读并关注How to create a Minimal, Complete, and Verifiable example
  • 您的 sn-p 不会重现此行为。请发布一个适当的最小 reproducible 示例。
  • 另外(不相关但无论如何):你想创建 translation_list before 循环 - 否则你在每次迭代时继续覆盖它,只会得到最后一个值最后。
  • 为什么要创建一个列表,而您总是向其中添加一个元素?

标签: python python-3.x list csv


【解决方案1】:

提供预期输出的代码的简短版本。
(我删除了附加到列表)

import csv

with open('translate_outputs.txt', newline='') as translations:
    translation_reader = csv.reader(translations, delimiter=',')
    for translation in translation_reader:
        print(translation[1].lower())

输出

me gustan los gatos
hola

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 2017-06-21
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多