2013-08-02 67 views
2

我找不出爲什麼我的簡單名稱腳本不起作用。它似乎在while循環中出錯。我可能會錯誤地稱呼它,但我想我可能會在我繼續研究的過程中嘗試獲得答案。python導入名稱文件和按字母順序排序

#!/usr/bin/python 

#open the file 
name_file = open('names.txt', 'r') 

#read in lines 
names = name_file.readlines() 

#close file 
name_file.close() 

#loop to place names in array 
index = 0 
     while index < len(names): 
      names[index] = names[index].rstrip('\n') 
      index += 1 
#sort 
names.sort() 

#print sorted names 
print names 
+1

你是什麼意思「不起作用」? –

+0

爲了將來的參考,以這種方式編寫'while'循環是額外的工作,並且很容易出錯。只需在範圍(len(name))中使用':或者,甚至更好,用於索引,枚舉(名稱)中的名稱:'。 (或者,甚至更好,把整個事情變成一個列表理解或genexpr。) – abarnert

+3

另一方面,最好使用'with open('names.txt')作爲name_file:'而不是顯式'close',並且[幾乎沒有任何理由調用readlines()'](http://stupidpythonideas.blogspot.com/2013/06/readlines-considered-silly.html)。 – abarnert

回答

6

也許這個作品:

with open ('names.txt', 'r') as f: 
    names = sorted (name.rstrip ('\n') for name in f) 

print (names) 

with需要關閉該文件一旦你葉範圍的照顧。

+0

我是個白癡。我不知道我想用循環完成什麼,但是我刪除了它,它按照設計工作。\ – cmluciano

+4

你不是個白癡。你正在學習,這是重要的一部分。你不能從成功中學習,你從錯誤中學習。無論是來自你自己,還是來自他人。 – Hyperboreus

+0

@Hyperboreus:你爲什麼在整個地方添加所有這些額外的空間? OP正在編寫漂亮的PEP8風格的代碼;鼓勵他不這樣做可能不是一個好主意。 – abarnert

-1
with open('names.txt', 'r') as f: 
    names = sorted(f.readlines()) 

for (i, name) in enumerate(names): 
    names[i] = name.rstrip('\n') 

這應該是個訣竅。

總是有更好的方法來使用for-loop來處理這些事情。

+1

這不起作用; '我'從哪裏來? (另外,爲什麼你添加額外的分號給沒有它們或需要它們的代碼?) – abarnert

+0

哦,你可以看到我不太習慣Python。我將更正這個答案 – Jocke

+0

訪問一個未定義的變量沒有任何與python ... – Hyperboreus