2015-05-19 1 views
2

Мне нужна программа, которая будет читать информацию из TXT-файла, который содержит имя человека и его возраст. Фокус в том, что может быть любое количество имен и возрастов, но они также могут повторяться, но считаться одним человеком.Вывод результатов с помощью функции in.txt document, когда есть мин и макс?

Программа должна написать младший, а затем самый старый человек в новом .txt документе.

.txt, он должен читать выглядит следующим образом:

Sarah 18 
Joshua 17 
Michael 38 
Tom 18 
Sarah 18 
Michael 38 

Затем после того, как программа выполняется с именами, что нужно записать в новый текстовый файл, например так:

Joshua 17 
Michael 38 

до сих пор у меня есть это:

def parse_info(): 
    info = open("info.txt", "r") 
    max_age = 0 
    max_name = '' 
    min_age = float('inf') 
    min_name = '' 

    for line in info: 
     m_list = line.split(" ") 
     if int(m_list[1]) > max_age: 
      max_age = int(m_list[1]) 
      max_name = m_list[0] 
     elif int(m_list[1]) < min_age: 
      min_age = int(m_list[1]) 
      min_name = m_list[0] 

    info.close() 

Я не знаю, как сделать программу создания нового .txt и судебный приказ e самый молодой и самый старый. Любая помощь?

ответ

1

Вы можете использовать write() method объектов файлов для записи строки в файл

with open("new.txt", "w") as output_file: 

    output_file.write("{0} {1}\n".format(max_name, max_age)) 
    output_file.write("{0} {1}".format(min_name, min_age)) 
+0

хотя всякий раз, когда я пытаюсь это, чтобы output_file он говорит "неверный синтаксис" – Hyun

+0

@Hyun К сожалению Там была опечатка. Missed ')' в обоих операторах. Исправлено в ответ. Надеюсь, теперь его работа – nu11p01n73R

+0

А как я не мог этого увидеть? Дурак я. Кажется, что он сломан, но теперь у меня появляется ошибка для моей собственной программы, говорящая, что 'max_name не определено'. Любые предложения по его устранению? – Hyun

1
def parse_info(): 
info = open("info.txt", "r") 
max_age = 0 
max_name = '' 
min_age = float('inf') 
min_name = '' 

for line in info: 
    m_list = line.split(" ") 
    if int(m_list[1]) > max_age: 
     max_age = int(m_list[1]) 
     max_name = m_list[0] 
    elif int(m_list[1]) < min_age: 
     min_age = int(m_list[1]) 
     min_name = m_list[0] 
info.close() 
return ((min_name,min_age),(max_name,max_age)) 
#end of function 
nameAge=parse_info() 
f = open("output.txt","w") 
f.write(nameAge[0][0]+" "+str(nameAge[0][1])+"\n") 
f.write(nameAge[1][0]+" "+str(nameAge[1][1])) 

, который должен работать

+0

Нет ошибок или чего-либо другого, но когда он создает новый файл, он ничего не пишет в нем. – Hyun

+0

Нет, он пишет, я уже тестировал, убедитесь, что у вас есть файл info.txt в том же каталоге – bubakazouba

0

Вы можете очень легко позволить Python делать всю тяжелую работу путем объединения свойств набора со свойствами сортировки списка кортежей.

def parse_info(): 
    persons = set() 
    for line in open('info.txt'): 
     name, age = line.split() 
     persons.add((int(age), name)) # Note that age comes first 

    # At this point, we have removed all duplicates, now we need 
    # to extract the minimum and maximum ages; we can simply do 
    # this by converting the set to a list and then sort the list. 
    # If a list entry is a tuple, the default behaviour is that it 
    # sorts by the first entry in the tuple. 
    persons = sorted(list(persons)) 

    # Now write the data to a new file 
    fd = open('new_info.txt', 'w') 
    age, name = persons[0] 
    fd.write('Youngest: %s %d\n' % (name, age)) 
    age, name = persons[-1] 
    fd.write('Oldest: %s %d\n' % (name, age)) 

parse_info()

Смежные вопросы