【问题标题】:fix excel/csv imports exports修复 excel/csv 导入导出
【发布时间】:2020-12-13 01:37:18
【问题描述】:

我刚开始学习 Python 正在努力学习。

程序的概念是咖啡店接受订单的“应用程序”[![在此处输入图片描述][1]][1]

        if Customer_Name in Customers:
            Customers[Customer_Name]['Orders'] += 1
            Customers[Customer_Name]['TotalAmount'] = Total_Amount
        else:
            Customers[Customer_Name] = {}
            Customers[Customer_Name]['Name'] = Customer_Name
            Customers[Customer_Name]['Address'] = Customer_Address
            Customers[Customer_Name]['ID'] = uuid.uuid1()
            Customers[Customer_Name]['Orders'] = 1
            Customers[Customer_Name]['TotalAmount'] = 0

        print(Customer_Name, "has ordered {} time(s)".format(Customers[Customer_Name]['Orders']))
        if Customers[Customer_Name]['TotalAmount'] == 0:
            print("This is the first time", Customer_Name, "orders")
        else:
            print(Customer_Name, "has spent", Customers[Customer_Name]['TotalAmount'], "in total")

        print("Current Date is: {}".format(Today_Date))
        Order_Price = float(input("Total amount of order:"))
        Total_Amount = Order_Price + Total_Amount
        if Print_Today != Today_Date:
            print("Total amount of orders today is: ", float(Total_Amount))
        answer1 = input("Send another order? (Y/N)").lower()
        process2 = answer1 == "y"
    LengthCustomersList = len(Customer_List)
    length += 1
    in_list += 1

    file.write(str(Customer_List[0:]) + '\n')  # TAKE CARE FOR DUPLICATE NAMES FROM SAME ADDRESS


    file1.write(Customer_Name + " has ordered " + str(Customers[Customer_Name]['Orders']) + " times in total\n")
    # FIX DUPLICATES SAME NAME SAME ADDRESS


    csv_writer = DictWriter(open('data_entered.csv','a'), fieldnames=['Customer Name', 'Customer Address', 'Customer ID', 'Total Orders',
                                           'Total Amount'])
    csv_writer.writeheader()
    csv_writer.writerows([{'Customer Name': Customers[Customer_Name]['Name'],'Customer Address': Customers[Customer_Name]['Address'],
                           'Customer ID': Customers[Customer_Name]['ID'],
                           'Total Orders': Customers[Customer_Name]['Orders'],
                           'Total Amount': Customers[Customer_Name]['TotalAmount']}])  # TOTAL AMOUNT= 0 IF NOT MORE THAN 2 TIMES ORDER






    if int(length) == int(LengthCustomersList):
        process1 = False
file.close()
file1.close()
file2.close()

这是我目前得到的输出

[![输出][2]][2]

问题是:为什么它只导入输入两次的名字,而不是 Michelle 在这种情况下。

附注*。我想了解如何解决这个问题。所以请不要直接给我解决方案

【问题讨论】:

  • 请修正代码缩进,对 Python 来说正确至关重要。
  • 现在应该不错了。

标签: python python-3.x csv


【解决方案1】:

您似乎没有遍历 Customers 字典以将其添加到 CSV 文件中。您可以使用Customers 嵌套字典的.keys() 属性并循环遍历每个客户字典。在循环内部,使用.writerow()函数添加当前客户的数据。

我对代码的更改:

# Rest of the code 

csv_writer = DictWriter(open('data_entered.csv', 'a'),
                            fieldnames=['Customer Name', 'Customer Address', 'Customer ID', 'Total Orders',
                                        'Total Amount'])
    csv_writer.writeheader()
    for customer_name in Customers.keys():
        csv_writer.writerows(
            [{'Customer Name': Customers[customer_name]['Name'], 'Customer Address': Customers[customer_name]['Address'],
              'Customer ID': Customers[customer_name]['ID'],
              'Total Orders': Customers[customer_name]['Orders'],
              'Total Amount': Customers[customer_name]['TotalAmount']}])  # TOTAL AMOUNT= 0 IF NOT MORE THAN 2 TIMES ORDER

完整代码:

import uuid  # GET A RANDOM ID FOR THE CUSTOMER
from datetime import date  # GET CURRENT DATE
from csv import DictWriter

file = open('CustomerNames.txt', 'w')
file1 = open('Orders_Per_Users.txt', 'a')
file2 = open('data_entered.csv', 'a')
x = -1
in_list = -1
length = 0
Total_Amount = 0.0
Customer_List = []
Address_List = []
Today_Key = date.toordinal(date.today())
Today_Date = date.today()
Print_Today = Today_Date
Customers = {}
Dates = {}
FirstEmployeeAccountUsername = "coffee1"
FirstEmployeeAccountPassword = "coffeeshop1"
SecondEmployeeAccountUsername = "coffee2"
SecondEmployeeAccountPassword = "coffeeshop2"
ThirdEmployeeAccountUsername = "coffee3"
ThirdEmployeeAccountPassword = "coffeeshop3"

print("Welcome to our coffee shop!")
print("Login")

# EMPLOYEE LOGIN PROCESS STARTS
LoginEnter = True
while LoginEnter:
    username = input("Username: ")
    password = input("Password: ")
    if username == FirstEmployeeAccountUsername and password == FirstEmployeeAccountPassword or username == SecondEmployeeAccountUsername and password == SecondEmployeeAccountPassword or username == ThirdEmployeeAccountUsername and password == ThirdEmployeeAccountPassword:
        print("Login Successful")
        LoginEnter = False
    else:
        print("Invalid Login. Try again")
# EMPLOYEE LOGIN PROCESS ENDS


# PROCESS AFTER ORDER PLACEMENT STARTS
process1 = True
process2 = True
while process1:
    while process2:
        x += 1

        Customer_Name = input("Customer's Name:")
        Customer_Address = input("Customer's Address:")
        Address_List.append(Customer_Address)
        Customer_List.append(Customer_Name)
        if x == 1:
            if Customer_Address in Address_List:
                First_Index = Address_List.index(Customer_Address)
                if Customer_Name == Customer_List[First_Index]:
                    Customer_List.pop(First_Index)
                    Address_List.pop(First_Index)

                    x = x - 1

        if Today_Key not in Dates:
            Dates[Today_Key] = {}
            if Customer_Name not in Dates[Today_Key]:
                Dates[Today_Key][Customer_Name] = 1
            else:
                Dates[Today_Key][Customer_Name] += 1

        if Customer_Name in Customers:
            Customers[Customer_Name]['Orders'] += 1
            Customers[Customer_Name]['TotalAmount'] = Total_Amount
        else:
            Customers[Customer_Name] = {}
            Customers[Customer_Name]['Name'] = Customer_Name
            Customers[Customer_Name]['Address'] = Customer_Address
            Customers[Customer_Name]['ID'] = uuid.uuid1()
            Customers[Customer_Name]['Orders'] = 1
            Customers[Customer_Name]['TotalAmount'] = 0

        print(Customer_Name, "has ordered {} time(s)".format(Customers[Customer_Name]['Orders']))
        if Customers[Customer_Name]['TotalAmount'] == 0:
            print("This is the first time", Customer_Name, "orders")
        else:
            print(Customer_Name, "has spent", Customers[Customer_Name]['TotalAmount'], "in total")

        print("Current Date is: {}".format(Today_Date))
        Order_Price = float(input("Total amount of order:"))
        Total_Amount = Order_Price + Total_Amount
        if Print_Today != Today_Date:
            print("Total amount of orders today is: ", float(Total_Amount))
        answer1 = input("Send another order? (Y/N)").lower()
        process2 = answer1 == "y"
    LengthCustomersList = len(Customer_List)
    length += 1
    in_list += 1

    file.write(str(Customer_List[0:]) + '\n')  # TAKE CARE FOR DUPLICATE NAMES FROM SAME ADDRESS

    file1.write(Customer_Name + " has ordered " + str(Customers[Customer_Name]['Orders']) + " times in total\n")
    # FIX DUPLICATES SAME NAME SAME ADDRESS

    csv_writer = DictWriter(open('data_entered.csv', 'a'),
                            fieldnames=['Customer Name', 'Customer Address', 'Customer ID', 'Total Orders',
                                        'Total Amount'])
    csv_writer.writeheader()
    for customer_name in Customers.keys():
        csv_writer.writerows(
            [{'Customer Name': Customers[customer_name]['Name'], 'Customer Address': Customers[customer_name]['Address'],
              'Customer ID': Customers[customer_name]['ID'],
              'Total Orders': Customers[customer_name]['Orders'],
              'Total Amount': Customers[customer_name]['TotalAmount']}])  # TOTAL AMOUNT= 0 IF NOT MORE THAN 2 TIMES ORDER

    if int(length) == int(LengthCustomersList):
        process1 = False
file.close()
file1.close()
file2.close()

更多关于.keys()和其他字典内置方法的信息:https://www.w3schools.com/python/python_ref_dictionary.asp

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2015-08-02
相关资源
最近更新 更多