簡體   English   中英

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

[英]Writing to textfile in a specific way using a list in python

我正在嘗試寫入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

那么我的問題是..我該如何實現此保存功能,使其僅寫出一個唯一的數字並將其所有名稱關聯到該數字? 感覺它不可能只包含名稱和數字的列表。.也許我錯了。

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

那么加載函數的外觀如何? 我嘗試做一個,它將所有內容加載到字典中,但是該程序無法與其他功能一起使用,就像在保存它並再次將其重新加載到程序之前一樣。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM