2011-04-03 52 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