Исправить экспорт экспорта в excel/csv

Я только начинаю изучать 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]

Возникает вопрос: почему он импортирует только то имя, которое вводится дважды, а не Мишель в данном случае.

PS*. Я хотел бы понять, как это исправить. Поэтому, пожалуйста, не давайте мне решение сразу.

Пожалуйста, исправьте отступ кода, это важно для Python.

Barmar 13.12.2020 02:42

Теперь должно быть хорошо.

AfterHover 13.12.2020 02:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы не просматриваете словарь Customers, чтобы добавить его в файл CSV. Вы можете использовать атрибут .keys() вложенного словаря Customers и перебирать каждый клиентский словарь. Внутри цикла используйте функцию .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

Можете ли вы объяснить или дать мне ссылку, чтобы я мог понять команду .keys(). Я новичок в словарях и еще не совсем в них разобрался

AfterHover 13.12.2020 03:11

Вот: w3schools.com/python/python_ref_dictionary.asp

Harshana 13.12.2020 03:14

Другие вопросы по теме