根据匹配的字符串打印所有行

时间:2012-12-04 08:54:26

标签: python-2.6 python-2.x

我有一个新文件名,其中包含以下数据:

1111
2012-5-12
new
p0
2222
2012-10-12
old
p1
3333
2012-15-12
new
p0
4444
2012-5-11
new
p1
5555
2011-5-12
old
p0

在这个文件中,每个id都有以下数据,如id,date,status和value(1111,2012-5-12,new,p0).... 在这个文件中,我必须打印所有状态值为“new”的id的数据。 我的输出应该是这样的:

1111
2012-5-12
new
p0
3333
2012-15-12
new
p0
4444
2012-5-11
new
p1

我尝试使用以下代码:

f1 = open('new','r')
output = open('new1','w')
lines = f1.readlines()
n =0
for i, line in enumerate(lines):       
    if n > 3:
        output.close()
        file1=open('new1','r')
        file2=open('new2','w')
        lines= file1.readlines()
        status = lines[2].strip()
        if status == 'new':
         for line in lines:
                file2.write(line)

        output = open('new1','w')       
        output.write(line)
        n = 1

    else:
        output.write(line)
        n = n + 1

new2和new1有以下输出: (NEW2)=======

p0
2012-5-11
new
p1
0 

(名new1)===========

p1
2011-5-12
old
p0  

程序将占用前4行并将其写入new1 .. 因此,它将搜索status ==“new”如果找到然后将所有四行写入new2另外明智再次读取下一行四行到文件的长度..

问题:我没有在new2中使用正确的数据,它应该包含如下数据:

1111
2012-5-12
new
p0
3333
2012-15-12
new
p0
4444
2012-5-11
new
p1

1 个答案:

答案 0 :(得分:0)

with open('new', 'r') as f:
    lines = f.readlines()

data = [lines[4 * i:4 * i + 4] for i in range(len(lines) / 4)]
new_data = [d for d in data if d[2] == 'new']

with open('new1', 'w') as f:
    for d in new_data:
        f.write('\n'.join(d))