使用python中的列表以特定方式写入文本文件

时间:2018-10-10 02:24:40

标签: python save text-files

我正在尝试在python中写入文本文件,其中文件中的输出。 我有一个名为phonebook的类,其中有一个包含该phonebook类对象的列表。

我的构造函数如下:

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 :(得分:2)

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()

答案 1 :(得分:0)

那么加载函数看起来如何? 我尝试做一个,它将所有内容加载到字典中,但是该程序无法与其他功能一起使用,就像在保存并再次将其重新加载到程序之前一样。

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()