2011-04-03 35 views
2

我需要閱讀我爲用戶raw_input使用空列表編寫的現有文件。不完全確定我閱讀後如何對文件進行排序。排序後,我需要將其保存在不同的文件名下並打印。 這是我到目前爲止有:排序文件?

Names=[] 

while 1: 

    Input = raw_input("Enter a name or press 'v' to quit:") 
    if Input == "v": 
     break 
    Names.append(Input) 


raw_input ('Press Enter to write each of the names to a file named NAMES.') 
text_file= open ("NAMES.txt", "w") 
text_file.writelines(Names) 
text_file.close() 

raw_input('Press Enter to Read file into a sorted list.') 


text_file = open("NAMES.txt", "r") 
names = text_file.readlines() 
text_file.close() 

^這是我需要進行排序,並根據不同的文件名和保存打印。卡住!

+0

你知道如何排序嗎?你知道如何寫入文件嗎? – 2011-04-03 09:41:00

+0

[這是一個對Python中排序機制的體面概述](http://wiki.python.org/moin/HowTo/Sorting/) - 它可能太快太快了 - 但堅持簡單的結束的頻譜,你不會犯太多錯誤。 – sarnold 2011-04-03 09:46:08

+0

您不對文件排序,您對放置文件數據的數據結構進行排序。編程需要精確的措詞。你應該改變標題。 – eyquem 2011-04-03 10:22:55

回答

0

你可以排序的名稱列表.... names.sort()

>>> names=["John","Angel","Luis"] 
>>> names.sort() 
>>> names 
['Angel', 'John', 'Luis'] 

編輯:評論答案

writelinesdoesn't add line separators因此 當你做text_file.writelines(Names)您只需編寫一行。

要寫入行分隔符,你可以做...

text_file.writelines(map(lambda x: x+'\n',Names))

或只是追加\n在每個名字的結尾......

Names.append(Input+'\n')

+0

是的,但是當我嘗試排序它回來相同。在這裏,如果我在raw_input中輸入a,c,d,b,它會返回爲['acdb'] – 2011-04-03 09:52:34

+0

我剛剛編輯了我的問題,請在答案中查看錯誤的來源。 – 2011-04-03 10:13:19

+0

啊謝謝!如何簡單 – 2011-04-03 10:19:42

0

這可能是家庭作業,所以我會給你一些提示。

你應該看看python docs進行排序。

對列表使用.sort()方法會改變列表並且不會返回任何值。

>>> a = ['2','1'] 
>>> a 
['2', '1'] 
>>> a.sort() 
>>> a 
['1', '2'] 

使用排序()名單上,將返回排序列表,並不會改變原來的列表:

>>> a = ['2','1'] 
>>> sorted(a) 
['1', '2'] 
>>> a 
['2', '1'] 
>>> 

至於你寫在文件中讀取,你可能想去掉結束字符:

names = [ line.strip() for line in text_file.readlines() ] 

使用上述任一方法對名稱列表進行排序,然後寫入新文件。基於此評論

是的,但是當我試圖解決它涉及 回來一樣。在這裏,如果我輸入 A,C,d,b在的raw_input它回來 爲[「ACDB」]

你爲什麼不能回到正確讀取名稱的原因是因爲您正在使用writelines

file。書寫線(序列)

將字符串序列寫入文件。該序列可以是任何可迭代的 對象生成字符串,通常是一個字符串列表 。沒有返回值 的值。 (這個名字是爲了匹配 readlines方法(); writelines()不添加 行分隔符。)

你既可以將線寫信給你的文件,你問他們:

text_file= open ("NAMES.txt", "w") 

while True: 
    Input = raw_input("Enter a name or press 'v' to quit:") 
    if Input == "v": 
     break 
    text_file.write(Input) 

text_file.close() 

或者你可以一個底線字符添加到您的輸入:既然你不使用名稱列表

Names.append(Input+"\n") 

反正第一個選項可以讓你放棄製造不必要的瓦里能夠。

+0

謝謝,我曾嘗試過,但它返回文件unsorted.if我輸入a,c,d,b在raw_input它回來作爲['acdb']? – 2011-04-03 10:01:09

+0

你得到名單後,你嘗試了什麼? – DTing 2011-04-03 10:05:55

+0

names.sort()我不明白爲什麼它不排序。它可以成爲我的名單嗎?在項目之間沒有逗號..... – 2011-04-03 10:11:35