Перепробовал множество способов из инета, говоришь...
Тогда нужно включить голову и подумать самому. А для начала - разбить задачу на подзадачи.
Задача №1: прочитать содержимое входного файла.
Задача №2: превратить прочитанную строку в список элементов для сортировки
Задача №3: отсортировать список по желаемому критерию
Задача №4: записать отсортированный список в выходной файл.
Теперь по пунктам.
№1. Ты ошибся в том, что .readlines() создаёт список, где каждая строка - один элемент. У тебя все элементы списка на одной строке, так что readlines() тебе не поможет. Используем просто .read()
with open('p022_names.txt', 'rt', encoding='utf-8') as src: #а может кодировка не utf-8? Тогда поменяй на нужную
content = src.read() #читаем всё содержимое файла в память. Если файл размером под гигабайт, будет весело... но для маленьких файлов сойдёт
# with позволяет гарантированно автоматически закрыть файл по выходу из блока
№2. Гуглим работу со строками в питоне. Самый большой вопрос: может ли в имени встретиться запятая? Если нет, то решается всё очень просто:
items = content.split(',')
Это даст нам список строк, но с тремя оговорками.
1) последняя запятая даст нам элемент списка - пустую строку.
Если это недопустимо, то следует от пустых строк избавиться:
items = [item for item in content.split(',') if item != '']
2) Строки в списках будут в кавычках. На сортировку это не повлияет, но если нужно избавиться от них, нужен будет ещё один шаг.
3) Если в конце строки есть перевод строки \n, то от него нужно избавиться до разбиения:
content = content.rstrip()
№3. Сортируем список прямо на месте: items.sort(). В отличие от метода .sort(), sorted() создаёт и возвращает новый сортированный список, не трогая старый. Если нужно по убыванию, items.sort(reverse=True).
№4.
content = ','.join(items)
чтобы склеить элементы обратно. Если последняя запятая нужна, то
content = (','.join(items)) + ','
. .join() работает эффективнее, чем проход циклом for вручную.
Ну и записать в файл:
with open('p022_names_sorted.txt', 'wt', encoding='utf-8') as dst: # можно писать и в тот же самый файл - он уже закрыт к этому моменту, так что можем его переоткрыть для записи.
dst.write(content)