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

标签 python save text-files

我正在尝试写入 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

我的问题是..我如何实现这个保存功能,以便它只写出一个唯一的号码以及与该号码相关的所有名称? 感觉只用包含姓名和数字的列表是不可能的。也许我错了..

最佳答案

Python 中的字典可让您根据键快速访问项目。因此,解决您的问题的一个好方法是使用 Phonebook.number 作为将 Phonebooks 列表存储为的键来索引 Phonebook 对象值(value)。然后最后根据您希望每行显示的方式处理打印。

这个示例应该适用于您的情况:

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

关于python - 使用Python中的列表以特定方式写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52731733/

相关文章:

python : Pandas pivot table for multiple columns at once which has duplicate values

python - 防止从 Python 调用 C 类型

使用开源软件具有可填写、可保存的表单的 PDF

delphi - 在Delphi中打开/操作/保存TextFile

c++ - Fstream 类 - 关于'>>'运算符的问题

c++ - 将多个文本文件合并为一个

python - 将 base64 编码的字符串转换为十六进制 int

python - 如何让这个 matplotlib 情节不那么嘈杂?

javascript - 如何使用 Javascript 将 div 转换为图像

android - 使用 FMOD 将输出保存到文件