我正在尝试编写一个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()
当我运行我的脚本时,输出看起来不变。你认为我哪里出错了?是因为换行变量不会在循环的迭代之间存储值吗?任何指导都将不胜感激。
答案 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)