2014-10-27 3 views
0

Так что я только недавно начал использовать python и хорошо ладил с ним, однако чтение и запись в файлы действительно меня задевали.Сортировка файлов и их распечатка в алфавитном порядке в 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() 

Как вы можете видеть, я полностью запутался. Если бы вы могли объяснить, где я ошибаюсь, и что я должен сделать, чтобы исправить это, это будет большой помощью.

ответ

1

это выглядит, как вы пишете в файл тонкой

Как насчет

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

это работает, потому что, когда вы перебирать файл Thats открытой для чтения он потребляет строки файла

кстати, это также причина, по которой ваш код не работает

, когда вы делаете для line in my_file, вы потребляете файл, и он lea VES вы в конце файла

тогда, когда вы делаете это во второй раз, когда вы уже в конце файла, так что вы никогда не идут внутри второго цикла

в дополнение к тому, что она выглядит, как вы пытаясь разобраться каждое имя, (т.е. Susan -> Sansu)

+0

Это не будет печатать каждую строку по отдельности, но это, вероятно, достаточно хороший ответ на домашнее задание вопрос , –

+0

там исправлено: P ... im, угадывая -1, вы не ... но было бы неплохо, если бы кто-нибудь оставил комментарий –

+1

Спасибо, что дал мне возможность сомневаться, но это не я. Я тоже ненавижу эти диски. –

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)'? Кроме того, символ комментария - '#', а не '' '(см. Первую строку). –

+0

@ StevenRumbalski, потому что я предпочитаю повторно открывать, используя «w» при переписывании в тот же файл, и я думаю, что '' 'очевидно опечатка, рассматривая использование' # 'для остальных 5 комментариев –

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() 
Смежные вопросы