我是新来的,所以我希望这不是多余的。假设我有一个名为"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 开始。每次跳
您可以使用 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.seek
和 itertools.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