Python:以 2 为增量搜索和打印文件中的行



我是新来的,所以我希望这不是多余的。假设我有一个名为"mccell"的输入文件,看起来像

     Initial Molecules:                 47
     Initial Molecules:                  1
       1          47
       1           1
       2          48
       2           0
       3          48
       3           0
       4          48
       4           0
       5          48
       5           0
       6          48
       6           0
       7          48
       7           0
       8          48
       8           0
       9          48
       9           0

正在尝试弄清楚如何以我指定的增量打印特定行。例如,我将如何从"初始分子"行开始,然后仅打印以两为增量的行。为了说明我所描述的内容,我希望代码做什么:

    Initial Molecules:                 47
    1          47
    2          48
    3          48
    4          48
    5          48
    6          48
    7          48
    8          48
    9           48

我已经尝试了readlines()函数,但无济于事,因为我只能打印整个文件。这是我拥有的错误代码:

    fo = open("mccell")
    lines = fo.readlines()
    print lines

任何帮助或提示将不胜感激。谢谢!

您可以使用范围方法来解决问题。

fo = open("mccell")
lines = fo.readlines()
print lines

遍历这些行,因为行在 python 中作为列表对象在内部存储,您可以使用从 0 到 len(lines) 的范围 2 步

for i in range(0, len(lines), 2):
    print lines[i]
print lines[0::2]

从索引 0 开始。每次跳

2次。

您可以使用 next 内置函数手动推进迭代器。

with open('mccell') as f:
    alternating = False
    for line in f:
        print(line)
        if "Initial Molecules" in line:
            alternating = True
        if alternating:
            next(f)
            # if we've encountered "Initial Molecules", skip a line
浏览

列表、找到起始行,然后使用 file.seekitertools.islice 再次浏览文件可能更容易阅读(但速度较慢)。这也使您可以更轻松地更改增量。

import itertools
INCREMENT = 2
with open('mccell') as f:
    for line_no, line in enumerate(f):
        if "Initial Molecules" in line:
            start = line_no
            break
    else:
        # there is no "Initial Molecules" in this file, handle it!
    f.seek(0)
    # put file pointer back at the start of the file
    for line in itertools.islice(f, start, None, INCREMENT):
        print(line)

注意:我从不使用f.readlines(),所以我从不在内存中构建文件中所有行的列表。 如果您的文件特别大(或目标计算机特别弱),这可能非常重要。此外,使用 with 块而不是 fo = open('mccell'); ...; fo.close() 意味着在完成文件处理后,文件不可能保持打开状态,这是一种既定的最佳做法。

您可以使用计数器来跟踪奇数行和偶数行。

line_num = 0
with open('mccell') as f:
  for line in f:
    if line_num % 2 == 0:
       print line
    line_num += 1

相关内容

  • 没有找到相关文章

最新更新