2014-09-19 51 views
0

我有一個文件全這些行:如何根據用戶爲一個項目定義的特定訂單對行進行排序?

ATOM 4703 CA GLN d 328 102.64 45.75 42.46 1.00236.44Ç

我想他們對於第4項排序( line.split()[4],其是d爲這種情況下)在一個特定的順序,例如第一線與d, 然後爲E線, 然後用甲等

到目前爲止,我的Python代碼下列行:

for counter in range(3): 
    if counter == 0: 
     if line.split()[4] == 'D':  
       outputFile.write(line) 
    if counter == 1: 
     if line.split()[4] == 'E': 
       outputFile.write(line) 
    if counter == 2: 
     if line.split()[4] == 'A':  
       outputFile.write(line)` 

但是,它只能得到包含D的行。任何幫助?

+0

請記住,在Python中,縮進事項,最後兩個'如果'陳述應該與第一個一致。嘗試修復縮進。 – rendon 2014-09-19 18:13:46

+0

在我的腳本中,它們是對齊的:( – wthimdh 2014-09-19 18:17:37

+0

)顯示外部循環,在那裏循環所有行。我認爲問題在於,要按照您的打算解決此問題,您應該運行循環三次:in第一次迭代打印出那些值爲'D'的行,在第二次迭代中打印出'A'等 – rendon 2014-09-19 18:21:53

回答

0

我認爲問題在於,要按照你打算的方式解決這個問題,你應該運行循環三次:在第一次迭代中打印那些行數爲D的行,在第二次迭代中使用A等等上。您的代碼應該是這樣的:

# Store the lines in an array, this way you don't to reopen the file. 
f = open('filename') 
lines = f.readlines() 

for line in lines: 
    if line.split()[4] == 'D': 
     print line 

for line in lines: 
    if line.split()[4] == 'E': 
     print line 

for line in lines: 
    if line.split()[4] == 'A': 
     print line 
+0

Definetly!它的工作!謝謝。關閉文件,我應該閱讀readlines文件,非常感謝你 – wthimdh 2014-09-19 18:37:34

+0

不客氣。 – rendon 2014-09-19 18:38:48

0

你要行排序,那麼爲什麼不使用list.sort具有關鍵作用?

with open('text.txt') as f: 
    lines = f.read().splitlines() 

ordering = ['D', 'E', 'A'] 

lines.sort(key=lambda x: ordering.index(x.split()[4])) 

for line in lines: 
    print(line) 

雖然不建議,如果lambda表達式似乎複雜,你可以使用全功能定義爲key如下:

def key(line): 
    splitted = line.split() 
    return ordering.index(splitted[4]) 

lines.sort(key=key) 
相關問題