当前位置: 首页 > 面试题库 >

python parse只打印列表的第一行

乐健
2023-03-14
问题内容

我有一个列表’a’,在这里我需要用文本文件’hello.txt’的行打印列表中所有匹配的字母,但是它只打印列表和行中的第一个单词而不是所有列表和线

a=['comp','graphics','card','part']

with open('hello.txt', 'r') as f:
    for key in a:
        for line in f:
            if key in line:
                print line, key

结果为:

comp and python
comp

所需的输出:

comp and python
comp
graphics and pixel
graphics
micro sd card
card
python part
part

请帮助我获得期望的输出。答案将不胜感激!


问题答案:

文件对象f是一个迭代器。迭代之后,它就筋疲力尽了,因此您的for line in f:循环仅适用于第一个键。将这些行存储在中list,这样就可以了。

a=['comp','graphics','card','part']
with open('hello.txt', 'r') as f:
    lines = f.readlines()  # loop the file once and store contents in list
    for key in a:
        for line in lines:
            if key in line:
                print line, key

另外,您也可以交换循环,因此只将文件迭代一次。如果文件很大,这可能会更好,因为您不必一次将所有内容加载到内存中。当然,这样您的输出可能会略有不同(以不同的顺序)。

a=['comp','graphics','card','part']
with open('hello.txt', 'r') as f:
    for line in f:     # now the file is only done once...
        for key in a:  # ... and the key loop is done multiple times
            if key in line:
                print line, key

或者,如Lukas在评论中所建议的那样,使用原始循环并通过调用f.seek(0)外部key循环的每次迭代来“重置”文件迭代器。



 类似资料:
  • 是否有任何缓存或某种设置在jasper或类似的东西?

  • 我正在尝试使用带有子报表的主报表,而这个也带有子报表。我有一个Object列表,我将其作为JAVA的参数传递。当我打印Jasper时,只打印列表中的第一项,我不知道为什么(如果我只使用Master和一个子报表,它将打印所有对象并正确显示所有数据)。 代码是:JAVA(最相关的部分) JRXML大师 子报告 子子报表 请忽略jrxml的简单设计,我只是删除了不相关的信息。知道吗?

  • 我想让程序把我的文本文件的每一行保存到String s中,并用PrintWriter将String s打印到另一个文本文件中。 我已经运行了代码并输出了。println(s),只输出了第一次的文本文件。我查找了如何将字符串打印到文本文件中,我发现我应该使用PrintWriter。我希望程序基本上能够使用PrintWriter将文本文档的内容“重新打印”到“updated.txt”文件中。然而,它似

  • 问题内容: 如何打印指示的div(而无需手动禁用页面上的所有其他内容)? 我想避免使用新的预览对话框,因此使用此内容创建新窗口没有用。 该页面包含几个表,其中一个表包含我要打印的div-该表已为网络设置了视觉样式,不应以打印形式显示。 问题答案: 这是一个通用的解决方案, 仅 使用 CSS ,我已经验证可以使用。 替代方法不是很好。使用非常棘手,因为如果有任何元素,则任何后代都不会显示。要使用它,

  • 问题内容: 我有一个清单清单: 我想要以下格式的输出: 我已经按照以下方式尝试过,但是输出的方式不是理想的: 输出: 在更改打印调用以代替使用时: 输出: 有任何想法吗? 问题答案: 遍历原始列表中的每个子列表,并在打印调用中使用以下命令将其解压缩: 默认情况下,分隔设置为,因此无需显式提供分隔。打印: 在您的方法中,您要遍历每个子列表中的每个元素,并分别进行打印。通过使用您在打印调用中 解压缩