根据条件加入多行文件的记录

时间:2009-07-13 16:28:26

标签: python file-io

我正在尝试编写一个python脚本

采取像这样的记录数据

6xxxxxxxx
7xxxxxxxx
6xxxxxxxx
7xxxxxxxx
7xxxxxxxx
6xxxxxxxx
6xxxxxxxx
6xxxxxxxx
7xxxxxxxx
7xxxxxxxx
7xxxxxxxx

并执行以下逻辑

newline = ""
read in a record
    if the record starts with a 6 and newline = ''
        newline = record
    if the records starts with a 7
        newline = newline + record
    if the record starts with a 6 and newline != ''
        print newline
        newline = record

所以它应该打印出来:

6xxxxxx 7xxxxxxxx
6xxxxxx 7xxxxxxxx 7xxxxxxx 7xxxxxxx
6xxxxxx
6xxxxxx
etc..

这是我的代码:

han1 = open("file","r")

newline = ""
for i in han1:
        if i[0] == "6" and newline == "":
                newline = i
        elif i[0] == "7":
                newline = newline + i
        elif i[0] == "6" and newline != "":
                print newline
                newline = ""
                newline = i


han1.close()

当我运行我的脚本时,输出看起来不变。你认为我哪里出错了?是因为换行变量不会在循环的迭代之间存储值吗?任何指导都将不胜感激。

3 个答案:

答案 0 :(得分:0)

if语句中的所有分支都没有以newline设置为“”结束。因此,第一个分支永远不会评估,因为newline永远不会“”,除非是第一个案例。

答案 1 :(得分:0)

您可以通过为以6开头的记录添加换行符来简化此操作,如果不是,则不附加换行符。

for line in open('infile'):
  if line[0] == '6':
    print ''
  print line.strip() ,

好的,这会在文件中首先创建一个空行,并且可能不会使用换行符结束文件。不过,这很容易解决。

或者解决方案没有那个问题并且更接近你的问题:

newline = ''
for line in open('infile'):
    if line[0] == '6':
        if newline:
            print newline
            newline = ''
    newline += ' ' + line.strip()
if newline:
     print newline

也有效,但稍长。

那说我认为你的主要问题是你没有剥离记录,所以你保留换行符。

答案 2 :(得分:0)

如果您的文件不是GB,

data=open("file").read().split()
a = [n for n,l in enumerate(data) if l.startswith("6") ]        
for i,j in enumerate(a):
    if i+1 == len(a):
        r=data[a[i]:]
    else:
        r=data[a[i]:a[i+1]]
    print ' '.join(r)