我正在尝试在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
然后我的问题是..我如何实现此保存功能,使其仅写出一个唯一的数字,并将其所有名称都连接到该数字? 感觉它不可能只处理包含名称和数字的列表。.也许是错误的。.
答案 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()