我是新人,所以我希望这不是多余的。假设我有一个名为" 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 Molecule"并且只打印以2为增量的行。为了说明我在描述我想要代码的内容:
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
任何帮助或提示将不胜感激。谢谢!
答案 0 :(得分:4)
您可以使用range方法来实现这一目标。
int sump(int * start,int * end)
{
while(start < end)
{
*start = 42;
start++;
}
return 17;
}
遍历这些行,因为行在内部存储为python中的列表对象,你可以使用范围从0到len(行)2步
fo = open("mccell")
lines = fo.readlines()
print lines
答案 1 :(得分:1)
print lines[0::2]
从索引0开始。每次跳2。
答案 2 :(得分:0)
您可以使用计数器来跟踪奇数和偶数行。
line_num = 0
with open('mccell') as f:
for line in f:
if line_num % 2 == 0:
print line
line_num += 1
答案 3 :(得分: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)
N.B。我从不使用f.readlines()
,所以我从不在内存中建立文件中所有行的列表。如果您的文件特别大(或者您的目标机器特别弱),这可能非常重要。同样使用with
块而不是fo = open('mccell'); ...; fo.close()
意味着在您完成文件后,文件仍然无法保持打开状态,这是一种既定的最佳实践。