对Python列表数据库进行排序



修改了下一个代码以包含新菜单项"(r)",以重新排序电话列表中的名称/数字保存了CSV文件。其中包括:

  1. 在main_loop中添加两行,一行到菜单_choice以打印出新菜单选项(并将'r'添加到可接受的选择列表中),
  2. 进行重新排序的新功能。此功能称为reorder_phones()

用于运行此代码的文件类似于下面的文件。

Before:
Choice: s
     Name                     Phone Number 
     1  Jerry Lopez             (212) 842-2527
     2  George Sierr            (212) 452-8145
     3  Elaine Benea            (212) 452-8723
After:
Choice: s
     Name                     Phone Number 
     1  Elaine Benea            (212) 452-8723
     2  George Sierr            (212) 452-8145
     3  Jerry Lopez             (212) 842-2527

主要问题是我不确定如何保存和使用排序列表;如果有人可以指导我,我会很感激。

import os
import csv

phones = []
name_pos = 0
phone_pos = 1
phone_header = [ 'Name', 'Phone Number']
def proper_menu_choice(which):
    if not which.isdigit():
        print ("'" + which + "' needs to be the number of a phone!")
        return False
    which = int(which)
    if which < 1 or which > len(phones):
        print ("'" + str(which) + "' needs to be the number of a phone!")
        return False
    return True
def delete_phone(which):
    if not proper_menu_choice(which):
        return
    which = int(which)
    del phones[which-1]
    print( "Deleted phone #", which)
def edit_phone(which):
    if not proper_menu_choice(which):
        return
    which = int(which)
    phone = phones[which-1]
    print("Enter the data for a new phone. Press <enter> to leave unchanged.")
    print(phone[name_pos])
    newname = input("Enter phone name to change or press return: ")
    if newname == "":
        newname = phone[name_pos]
    print(phone[phone_pos])    
    newphone_num = input("Enter new phone number to change or press return: ")
    if newphone_num == "":
        newphone_num = phone[phone_pos]
    phone = [newname, newphone_num]
    phones[which-1] = phone

def save_phone_list():
    f = open("myphones.csv", 'w', newline='')
    for item in phones:
        csv.writer(f).writerow(item)
    f.close()
def load_phone_list():
    if os.access("myphones.csv",os.F_OK):
        f = open("myphones.csv")
        for row in csv.reader(f):
            phones.append(row)
        f.close()
def show_phones():
    show_phone(phone_header, "")
    index = 1
    for phone in phones:
        show_phone(phone, index)
        index = index + 1
    print()
def show_phone(phone, index):
    outputstr = "{0:>3}  {1:<20}  {2:>16}"
    print(outputstr.format(index, phone[name_pos], phone[phone_pos]))
def create_phone():
    print("Enter the data for a new phone:")
    newname = input("Enter name: ")
    newphone_num = input("Enter phone number: ")
    phone = [newname,newphone_num]
    phones.append(phone)
def reorder_phones():
    global phones       # this insures that we use the one at the top
    sorted(phones, key=lambda x: x[0])
def menu_choice():
    """ Find out what the user wants to do next. """
    print("Choose one of the following options?")
    print("   s) Show")
    print("   n) New")
    print("   d) Delete")
    print("   e) Edit")
    print("   q) Quit")
    print("   r) Reorder")
    choice = input("Choice: ")    
    if choice.lower() in ['n','d', 's','e', 'q', 'r']:
        return choice.lower()
    else:
        print(choice +"?")
        print("Invalid option")
        return None

def main_loop():
    load_phone_list()
    while True:
        choice = menu_choice()
        if choice == None:
            continue
        if choice == 'q':
            print( "Exiting...")
            break     # jump out of while loop
        elif choice == 'n':
            create_phone()
        elif choice == 'd':
            which = input("Which item do you want to delete? ")
            print("which is ", which)
            delete_phone(which)
        elif choice == 's':
            show_phones()
        elif choice == 'e':
            which = input("Which item do you want to edit? ")
            print("which is ", which)
            edit_phone(which)
        elif choice == 'r':
            reorder_phones()
        else:
            print("Invalid choice.")
    save_phone_list()

# The following makes this program start running at main_loop() 
# when executed as a stand-alone program.    
if __name__ == '__main__':
    main_loop()

使用以下方法对sort()函数进行排序对原始文件和sorted()分类。

def reorder_phones():
    global phones       # this insures that we use the one at the top
    phones.sort()

最新更新