2009-07-13 47 views
1

我想寫一個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

您可以通過簡單地追加一個以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 

也可以,但是略長。

這就是說我認爲你的主要問題是你不去掉記錄,所以你保留換行。

0

您的if語句中的任何分支均完成newline設置爲「」。因此,第一個分支將永遠不會評估,因爲newline永遠不會「」,除非是第一種情況。

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)