How can i fix the .csv imports?

自闭症网瘾萝莉.ら 提交于 2020-12-15 04:24:51

问题


I am at the beginning of learning Python trying to learn

The concept of the program is an "Application" for a coffee shop to take orders

This is the CSV import

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

This is the output I am currently getting

The question is: Why does it only import the name that it gets inputted twice, and not Michelle in this case.

PS*. I would like to understand how to fix this. So please don't just give me the solution straight up


回答1:


It looks like you don't loop through the Customers dictionary in order to add it to the CSV File. You can use the .keys() attribute of the Customers nested dictionary and loop through each customer dictionary. Inside the loop, use .writerow() function to add the data of the current customer.

My changes to the code:

# 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

Full code :

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

More information on .keys() and other dictionary built-in methods: https://www.w3schools.com/python/python_ref_dictionary.asp



来源:https://stackoverflow.com/questions/65271618/how-can-i-fix-the-csv-imports

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!