Как изменить старую информацию в файле на новую используя массивы?

filename = input('Enter name of file: ')
file = open(filename, 'r')
mass = []
mass1 = []

mass = file.readlines()

for i in mass:
    mass1.append(i.strip().split(','))

for i in sorted(mass1, key=lambda para : (para[0])):
    for i in mass1:
        file.write("%s\n" % i)
file.close()

Программа получив название файла должна без вывода на экран информации, посортировать по алфавиту фамилии. Это файл:

Noobov,J.I,287874
Sektant,K.S,164874
Pituh,K.Y,164845
Lolya,L.E,287234
BPA4SMERTI,O.I,164567

Должно это выглядеть примерно вот так:

BPA4SMERTI', 'O.I', '164567
Lolya', 'L.E', '287234
Noobov', 'J.I', '287874
Pituh', 'K.Y', '164845
Sektant', 'K.S', '164874

Но посортированное должно быть в файле, как это сделать? Это вообще мой первый опыт с записью информации из массива в файл :/ Потому буду не против если вы расскажете о том как работает ваш способ. Заранее спасибо!


Ответы (2 шт):

Автор решения: MaxU
import pandas as pd

(pd
 .read_csv(filename, header=None, names=["name", "col2", "col3"]) # парсинг CSV в DataFrame
 .sort_values("name")                                             # сортировка фрейма по столбцу "name"
 .to_csv(filename, header=None, index=False))                     # запись результата в CSV
→ Ссылка
Автор решения: Shamus Rezol
# coding=utf-8

""" Опрашиваем пользователя о жертвенном файле:
"""
file=input("file: ")#"0ruc236z.txt"

""" Преобразуем информацию файла в Field структуры:
"""
class Field(object):

    def __init__(self, last_name, initials, phone):

        self.last_name  =last_name
        self.initials   =initials
        self.phone      =phone

    def serialize(self):
        """ Возвращает сериализованую строку себя.
        """
        return f"{self.last_name},{self.initials},{self.phone}"

def deserialize(data):
    """ Возвращает результат десериализации информации (data) в Field структуры.
    """
    result  =list()
    push    =result.append

    for line in data.split('\n'):

        if line == str() or line.isspace():

            """ Пропускаем пустую строку.
            """
            continue

        """ На каждой линии должны находится аргументы одного Field'а.
            Принимаем их вид как «arg1,arg2,arg3».
        """
        push(Field(*line.split(',')))

    return result

""" Читаем файл и сортируем его:
"""
new=list()

with open(file) as fp:

    data    =fp.read()
    fields  =deserialize(data)

    """ Сортируем структуры field в списке fields по их аттрибуту last_name:
    """
    new     =sorted(fields, key=lambda field: field.last_name)

""" Перезаписываем файл по мотивам отсортированного списка (new):
"""
with open(file, 'w') as fp:

    for field in new:

        data=field.serialize()

        fp.write(data + '\n')
→ Ссылка