2014-12-13 22 views
0

此代碼我試圖左右交換兩個colums在一個文本文件,但運行COLUMN2名稱「列2」時沒有定義爲什麼我在這段代碼中變得無效的變量?

file = open("class1.txt", 'r') 
lines = file.readlines() 
file.close() 

for line in lines: 
    parts = line.split() # split line into parts 
    if len(parts) > 1: 
     column1 = parts[0] 
    if len(parts) < 1: 
     column2 = parts[1] 


file = open("class1.txt", 'w') 
file.write(("\n") + str(column2) + str(column1)) 
file.close() 
+0

該錯誤似乎源於試圖將'column2'轉換爲'str'對象的代碼的'file.write'部分,但它不存在。主要是由於它是如何在你的循環中設置的。 – 2014-12-13 15:48:01

+0

我以前遇到過1000次問題。檢查我的答案,不管你做什麼都會拋出一個錯誤。我寫了答案。 – GLHF 2014-12-13 15:49:43

+1

您似乎已經意外刪除了您的問題內容,​​從而使答案無效;我回滾了編輯。 – DSM 2014-12-14 15:44:09

回答

1

你瘋玩這部分了:

if len(parts) < 1: 
    column2 = parts[1] 

我很確定你不想訪問一個不存在的元素。

但無論如何,您不想依賴可能存在或不存在的變量。一定要給他們一些理智的默認。

+0

另外,分割一個字符串總是會返回至少一個元素,所以這個條件永遠不會是真的。 – tripleee 2014-12-14 16:11:05

0
  • 您想交換第一列和第二列。
  • 您的輸入文件與您的輸出文件具有相同的名稱,因此您第一次運行程序時將覆蓋輸入文件。使用不同的名字。
  • 如果您使用with語句,您可以避免打開和關閉,然後像現在一樣打開和關閉。您可以在打開這兩個文件的情況下執行流程。

如果輸入文件每行有兩列,這樣簡單的東西會做的伎倆:

with open ("class1.txt", 'r') as fin, open("class2.txt", 'w') as fout: 
    for line in fin.readlines(): 
     parts = line.split() 
     fout.write(parts[1]+' '+parts[0]+'\n'] 

但是,如果你有一列某些行和其他有兩個以上,你將不得不做更多的事情。你的文件如何,你將如何需要你的輸出?

+0

完美的作品! – Richard 2014-12-13 17:25:05

相關問題