Моя программа ' технически ' работает ... но должно быть лучшее решение.
Итак, в текстовом файле есть список из 500 лучших фильмов в случайном порядке.
Avatar 71245151
Star Wars 92815125
Matrix 4215151 ......
Вопрос заключается в том, чтобы создать функцию, которая принимает текстовый файл в качестве входных данных и записывать 500 лучших фильмов по порядку (от наивысшего к наименьшему объему продаж) в другой файл.
def sort_films(file_name, destination_file):
open_file = open(file_name, "r") #Read the file
movie_list = []
for line in open_file:
movie_list.append(line.split("\t")) #Since "\t" exists, split
open_file.close()
Здесь, movie_list будет выглядеть примерно так
movie_list = [['Avatar', '5241521\n'], ['Star Wars', '9512512'], ....]
Так как нам не нужны разрывы строк при преобразовании строки чисел в целые числа и сортировке чисел от высокого к низкому, это то, что я сделал.
Я также помещаю числа в начале каждого списка, потому что sort () сортирует фильмы в алфавитном порядке, а это не то, что мне нужно.
for movie in movie_list:
movie.insert(0, movie[1])
movie.pop()
for movie in movie_list:
movie[0] = int(movie[0].replace("\n", ""))
movie_list.sort(reverse = True)
Теперь я собираюсь написать файлы.
open_file = open(destination_file, "w")
string = ""
Я добавил разрыв строки, потому что мы хотим отобразить фильм в том виде, в каком он был в другом текстовом файле (после преобразования продаж в строку.)
Изменила позицию, потому что изначально заказ был [Фильм, Продажи].
for movie in movie_list:
movie[0] = str(movie[0]) + "\n"
movie.insert(0, movie[1])
movie.pop()
Потом у нас был знак "\ t", поэтому я объединил название фильма и продажи.
string += "\t".join(movie)
open_file.write(string)
open_file.close()
sort_films("top500.txt", "top500result.txt")
Мне кажется, что есть способ сортировки числа по максимуму и минимуму без необходимости изменения индекса (позиции) в списке ...
Буду признателен, если кто-нибудь сможет мне помочь.