排序文件并在python中按字母顺序打印出来

时间:2014-10-27 16:49:18

标签: python file sorting

我需要编写一个python脚本,写出一个包含10个名字的列表,读回文件并按字母顺序打印出来

我有点得到我必须做的但我怎么做是我的问题,我不知道你是否必须将文本文件转换为列表然后使用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()

3 个答案:

答案 0 :(得分:1)

看起来你正在写文件

如何

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

这是有效的,因为当你遍历一个打开阅读的文件时,它会消耗文件的行

顺便说一下,这也是你的代码不起作用的原因

当您使用line in my_file时,您使用该文件并将其留在文件的末尾

然后当你第二次这样做时,你已经在文件的末尾,所以你永远不会进入第二个循环

除此之外,您似乎正在尝试对每个名称进行排序,(即Susan - > Sansu)

答案 1 :(得分:1)

试试这个:

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()

答案 2 :(得分: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)