Python 基于条件连接多行文件上的记录

Python 基于条件连接多行文件上的记录,python,file-io,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 = re

我正在尝试编写一个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()

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

您的if语句中没有一个分支以
换行设置为“”结束。因此,第一个分支将永远不会求值,因为除了第一种情况外,
换行
永远不会是“”。

您可以通过简单地为以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
也可以,但是稍微长一点


也就是说,我认为您的主要问题是您没有剥离记录,因此保留换行符。

如果您的文件不是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)