1

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

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、日期、状态和值(1111,2012-5-12,new,p0).... 在此文件中,我必须打印所有具有状态值的 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 

(新1)============

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
4

1 回答 1

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))
于 2013-07-27T16:35:17.723 回答