Запись в текстовый файл определенным образом с использованием списка в Python - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь записать в текстовый файл в Python, где вывод в файл.У меня есть класс, называемый телефонной книгой, в котором есть список, содержащий объекты класса телефонной книги.

Мой конструктор выглядит так:

def __init__(self,name,number):
        self.name = name
        self.number = number

Когда я добавляю новый объект в список, это выглядит так:

def add(self):
    name = input()
    number = input()
    p = Phonebook(name,number)
    list.append(p)

Когда я записываю свой список в текстовый файл, функция выглядит следующим образом:

def save():
    f = open("textfile.txt","w")
    for x in list:
       f.write(x.number+";"+x.name+";")
    f.close()

И выдает:

12345;david;12345;dave;12345;davey;09876;cathryn;09876;cathy; and so on..

выглядеть следующим образом:

12345;david,dave,davey
09876;cathryn,cathy,
78887;peter,pete,petr,petemon

Тогда у меня вопрос ... Как мне реализовать эту функцию сохранения, чтобы она выписывала только один уникальный номер и все его имена, связанные с этим номером?Чувствуется, что это невозможно сделать только со списком, содержащим имена и цифры .. Может, я не прав ..

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

так как бы выглядела функция загрузки?Я попытался сделать один, и он загружает все в словарь, но программа не работает с другими моими функциями, как это было до того, как я сохранил его и снова загрузил в программу.

def load(self,filename):
self.dictList = {}
f = open(filename,"r")
for readLine in f:
    readLine = readLine.split(";")
    number = readLine[0]            

    nameLength = len(readLine[1:])

    name = readLine[1:nameLength]
    p = phonebook(name)


    self.dictList[number] = [p]
    print(self.dictList)
f.close()
0 голосов
/ 10 октября 2018

Словари в Python дают вам быстрый доступ к элементам на основе их ключа.Таким образом, хорошим решением вашей проблемы было бы проиндексировать Phonebook объекты, используя Phonebook.number в качестве ключа для сохранения списка Phonebooks в качестве значений.Затем в конце просто обработайте печать на основе того, как вы хотите, чтобы каждая строка отображалась.

Этот пример должен работать в вашем случае:

phone_dict = dict() # Used to store Phonebook objects intead of list

def add(self):
    name = input()
    number = input()
    p = Phonebook(name,number)

    if p.number in phone_dict:
       phone_dict[p.number].append(p)  # Append p to list of Phonebooks for same number
    else:
       phone_dict[p.number] = [p] # Create list for new phone number key

def save():
    f = open("textfile.txt","w")

    # Loop through all keys in dict
    for number in phone_dict:
       f.write(x.number + ";")  # Write out number
       phone_books = phone_dict[number]

       # Loop through all phone_books associated with number
       for i, pb in enumerate(phone_books):
           f.write(pb.name)
           # Only append comma if not last value
           if i < len(phone_books) - 1:
               f.write(",")

       f.write("\n") # Go to next line for next number
    f.close()
...