DazaiCoder
@DazaiCoder

Как отсортировать файл по алфавиту?

У меня есть файл с таким содержанием:
"MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN","MARGARET","DOROTHY","LISA","NANCY","KAREN","BETTY","HELEN","SANDRA","DONNA","CAROL","RUTH","SHARON","MICHELLE","LAURA","SARAH","KIMBERLY","DEBORAH","JESSICA","SHIRLEY","CYNTHIA","ANGELA","MELISSA","BRENDA","AMY","ANNA","REBECCA","VIRGINIA","KATHLEEN","PAMELA","MARTHA","DEBRA","AMANDA","STEPHANIE","CAROLYN","CHRISTINE","MARIE","JANET","CATHERINE","FRANCES","ANN","JOYCE","DIANE","ALICE","JULIE","HEATHER","TERESA","DORIS","GLORIA","EVELYN","JEAN","CHERYL","MILDRED","KATHERINE","JOAN","ASHLEY","JUDITH","ROSE","JANICE","KELLY","NICOLE","JUDY","CHRISTINA","KATHY","THERESA","BEVERLY","DENISE","TAMMY","IRENE","JANE","LORI","RACHEL","MARILYN","ANDREA","KATHRYN","LOUISE","SARA","ANNE","JACQUELINE","WANDA","BONNIE","JULIA","RUBY","LOIS","TINA","PHYLLIS","NORMA","PAULA","DIANA","ANNIE","LILLIAN","EMILY","ROBIN","PEGGY","CRYSTAL","GLADYS","RITA","DAWN","CONNIE","FLORENCE","TRACY","EDNA","TIFFANY","CARMEN","ROSA","CINDY","GRACE","WENDY","VICTORIA","EDITH","KIM","SHERRY","SYLVIA","JOSEPHINE","THELMA","SHANNON","SHEILA","ETHEL","ELLEN","ELAINE","MARJORIE","CARRIE","CHARLOTTE","MONICA","ESTHER","PAULINE","EMMA","JUANITA","ANITA","RHONDA","HAZEL","AMBER","EVA","DEBBIE","APRIL","LESLIE","CLARA","LUCILLE","JAMIE","JOANNE","ELEANOR","VALERIE","DANIELLE","MEGAN","ALICIA","SUZANNE","MICHELE","GAIL","BERTHA","DARLENE","VERONICA","JILL","ERIN","GERALDINE","LAUREN","CATHY","JOANN","LORRAINE","LYNN","SALLY","REGINA","ERICA","BEATRICE",

мне нужно отсортировать все имена по алфавиту
испробовал множество способов из инета, последний выглядел так:
file = open('p022_names.txt','r')
names = file.readlines()
b = sorted(names)
print(b)

Но выводит лишь содержимое файла в списке, как сделать сортировку по алфавиту?
  • Вопрос задан
  • 40 просмотров
Решения вопроса 1
@Vindicar
Перепробовал множество способов из инета, говоришь...
Тогда нужно включить голову и подумать самому. А для начала - разбить задачу на подзадачи.
Задача №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)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
02 авг. 2021, в 23:34
750 руб./в час
02 авг. 2021, в 23:03
10000 руб./за проект
02 авг. 2021, в 23:03
45000 руб./за проект