我有一个巨大的文本文件,由这样的“块”组成:
block
object pen
fruit apple
people mike
block
electronic laptop
city dallas
fruit banana
object stapler
vehicle car
block
people george
fruit orange
vehicle truck
city austin
object hammer
在每一个街区里,在一个随机的线上只有一个水果。每个块有不同的行数。我想在这个文件中迭代,打印包括水果名称在内的所有内容,然后跳过到下一个块。一旦我在一个街区找到水果,检查下一行是不是水果就浪费时间了。我只想跳到下一个街区,但问题是我不知道前面有多少行。因此,输出应如下所示:
^{pr2}$我可以用两种方法生成这个输出,一种是:
flag = True
with open("sample.txt", "r") as f:
for line in f.readlines():
if line.split()[0] == 'fruit':
print "the fruit is: " + line.split()[1]
flag = False
if line.split()[0] == 'block':
flag = True
if flag:
print line
还有两个:
flag = False
with open("sample.txt", "r") as f:
for line in f.readlines():
if line.split()[0] == 'fruit':
print "the fruit is: " + line.split()[1]
flag = True
if line.split()[0] == 'block':
flag = False
if flag:
continue
print line
但这不是我想要的。我的代码仍然检查每一行是否是水果。我想跳过水果后的线路,一直到街区,然后从那里继续。我怎么跳?在
说我疯了,但我想用
list comprehension
和zip()
对这个问题进行不同的挖掘:输出:
^{pr2}$但只有在每个
block
后面总是在下一个block
之前加一个fruit
,这才有效。在看起来很漂亮,好吧。别怀疑我选择的武器。。。在
您可以添加一个在找到
block
行后触发的内部循环。请注意,这假设您的数据格式良好(即,每个块都有一个结果)。在另一个你可以做的事情是更复杂一些,但是如果数据文件真的很大的话,可以更快地使用^{} 和{a2}。在
相关问题 更多 >
编程相关推荐