2014-10-27 109 views
0

所以我最近才开始使用python,并且已经开始使用python了,但是读取和写入文件确实让我很难过。对文件进行排序并在python中按字母顺序打印出来

我的分配如下: 然后,您需要编写写出的10人名单的Python脚本,读取文件回来,按字母顺序打印出

我有点明白我必须做但我如何做是我的问题,我不知道是否必须将文本文件转换为列表,然后使用sort()函数,或者如果我可以通过分割线来完成。

这里是我的时刻代码:

my_file = open("Names.txt", "w") 

for i in range(1, 11): 
    my_file.write(str(input("Please enter a name")) + ", \n") 

my_file.close() 

my_file = open("Names.txt", "r") 
for line in my_file: 
    print(line) 

for line in my_file: 
    my_file.sort() 

my-file.close() 

正如你所看到的,我彻底糊涂了。 如果您可以请解释我要出错的地方,以及我必须做些什么来解决这个问题,这将是一个很大的帮助。

回答

1

它看起来像你正在写的文件罚款

如何只

print "".join(sorted(open("Names.txt", "r"))) 

这工作,因为当你遍历文件多数民众赞成开放阅读它占用的文件的行

顺便说一句,这也是你的代码不工作的原因

当你这样做line in my_file你消耗的文件, VES你在文件的结尾

那么当你做了第二遍,你已经在文件的结尾让你永远走在第二循环中

此外,它看起来像你想每个名字,(即苏珊 - >山水)排序

+0

这不会单独打印每行,但它可能是一个家庭作业的问题足够好的答案。 – 2014-10-27 16:56:11

+0

there fixed:P ...即时猜测-1不是你...但它会很好,如果谁downvoted留下评论 – 2014-10-27 16:59:33

+1

感谢给我的怀疑的好处,不,它不是我。我讨厌那些驱车降低的言论。 – 2014-10-27 17:01:29

0
with open("Names.txt", "a+") as f: # use with to open files as it closes them automatically 
    for i in range(1, 11): 
     f.write("{} \n".format(str(input("Please enter a name")))) 
    f.seek(0) # go back to start of file 
    for line in f: # print each name 
     print(line) 
    f.seek(0) # go back to start again 
    lines = sorted(f.readlines()) # sort the names 
    with open("Names.txt", "w") as f1: # write names in sorted order 
     for line in lines: 
      f1.write(line) 
+0

为什么第二次打开该文件?为什么不是另一个'f.seek(0)'?此外,注释字符是'#',而不是'''(请参阅您的第一行)。 – 2014-10-27 17:16:49

+0

@ StevenRumbalski,因为我更喜欢在重写同一个文件时使用“w”重新打开,我认为'''显然是考虑到其他5条评论使用'#'的拼写错误 – 2014-10-27 17:23:32

0

试试这个:

my_file = open("Names.txt", "w") 

for i in range(1, 11): 
my_file.write(str(input("Please enter a name")) + ", \n") 

my_file.close()  
my_file = open("Names.txt", "r") 
for line in sorted(my_file): 
    print line 

my-file.close() 
相关问题