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)

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

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

Похожие вопросы