Как записать входные данные в файлы в одну строку и сохранить несколько входных данных в файле и иметь возможность их читать?

#python #file #file-io

Вопрос:

Я программист-самоучка и пытаюсь создать систему продажи билетов на Python, где она принимает несколько входных данных и считывает данные из файла в зависимости от количества билетов. Однако предыдущие входные данные перезаписываются более новыми входными данными, и я, похоже, не могу это исправить.

Результат, который я получаю, выглядит так:

 J
a
k
e
25
M
a
l
e
 

Но я бы хотел, чтобы результат выглядел так:

 Jake;25;Male
 

Я прикрепил код этой программы ниже. Любая помощь будет очень признательна. Спасибо.

 import sys, select, os
from os import system

def option_1():

    with open(input("Input file name with extension: "), 'w ') as f:

        people = int(input("nHow many tickets: "))
        name_l = []
        age_l = []
        sex_l = []  

        for p in range(people):
            name = str(input("nName: "))
            name_l.append(name)
            age = int(input("nAge: "))
            age_l.append(age)
            sex = str(input("nGender: "))
            sex_l.append(sex)

        f.flush()
        for item in name:
            f.write("%sn" %item)
        for item in [age]:
            f.write("%sn" %item)
        for item in sex:
            f.write("%sn" %item)


    x=0
    print("nTotal Ticket: ", people, 'n')
    for p in range(1, people   1):
        print("Ticket No: ", p)
        print("Name: ", name)
        print("Age: ", age)
        print("Sex: ", sex)
        x  = 1



def option_2():

    with open(input('Input file name with extension: '), 'r') as f:
        fileDir = os.path.dirname(os.path.realpath('__file__'))
        f.flush()
        f_contents = f.read()
        print("n")
        print(f_contents, end = '')

def main():

    system('cls')
    print("nTicket Booking Systemn")
    print("n1. Ticket Reservation")
    print("n2. Read")
    print("n0. Exit Menu")
    print('n') 

    while True:

        option = int(input("Choose an option: "))
        if option < 0 or option > 2:
            print("Please choose a number according to the menu!")

        else:

            while True:

                if option == 1:
                    system('cls')
                    option_1()
                    user_input=input("Press ENTER to return to main menu: n")
                    if((not user_input) or (int(user_input)<=0)):
                        main()

                elif option == 2:       
                    system('cls')
                    option_2()
                    user_input=input("Press ENTER to return to main menu: n")
                    if((not user_input) or (int(user_input)<=0)):
                        main()

                else:
                    exit()


if __name__ == "__main__":
    main()
 

Комментарии:

1. Я думаю, что вам будет полезно изучить обработку CSV-файлов на Python.

Ответ №1:

Если у вас есть последняя версия python, вы можете использовать an f-string для создания требуемого формата.

Вам нужен цикл для повторения собранной вами информации.

Возможно, вам просто это понадобится:

 ...
f.flush()
for name,age,sex in zip(name_l, age_l, sex_l):
    f.write(f"{name};{age};{sex}n")
...
 

Кроме того, для распечатки на консоль требуется аналогичный цикл:

 print("nTotal Ticket: ", people, 'n')
for p,(name,age,sex) in enumerate(zip(name_l, age_l, sex_l), start = 1):
    print("Ticket No: ", p)
    print("Name: ", name)
    print("Age: ", age)
    print("Sex: ", sex)