Python — Не будет записывать в определенный столбец в csv-файле, вместо этого он перезаписывает всю строку

#python #csv

Вопрос:

Следующий код предназначен для обеспечения того, чтобы сотрудник мог входить в систему и включать/выключать часы в указанные дни. Когда я пытаюсь установить время для сотрудника и ввести все часы, код сохраняет его в файл, однако не в тех конкретных столбцах, которые я хочу. Это позволит сохранить его, заменив всю строку и переписав ее с самого начала. Тем не менее, я хочу, чтобы он сохранялся с 7-й колонки и далее.

 role = input("Choose role [E]mployee / [P]ayroll clerk [Default]:")

if role == "E" or role == "e":
    
    logged_in = False
    
file = open("user_pass.csv", 'r')

    user_pass_list = []

    for row in file:
        field = row.split(",")

        user_name = field[0]
        pass_word = field[1]
        user_id = field[2]
        user_pass_list.append([user_name, pass_word, user_id])
    file.close()
    while not logged_in:
        print("Please enter your details to log in:n")
        user_name1 = input("Please enter your username: ")
        pass_word1 = input("Please enter your password: ")
        for item_num in range(0, len(user_pass_list)):
            if user_name1 == user_pass_list[item_num][0]:
                if pass_word1 == user_pass_list[item_num][1]:
                    logged_in = True
                    user_name = user_pass_list[item_num][0]
                    pass_word = user_pass_list[item_num][1]
                    user_id = user_pass_list[item_num][2]
        if not logged_in:
            print("Incorrect. Please try again.n")

    print("Hello", user_name)

    clock = input("Clock [I]n / Clock [O]ut:")

    if clock == "I" or clock == "i":
        editfile = open("CafeTestData.csv", "r")
        completion = "false"
        newfile = editfile.readlines()
        for line in newfile:
            if line.split(",")[0] == user_id:
                while completion == "false":
                    print(line)
                    details = line.split(",")

                    mon_time = input("Please enter the hours worked on Monday: ")

                    if mon_time == "":
                        mon_time = details[7]

                    tue_time = input("Please enter the hours worked on Tuesday: ")

                    if tue_time == "":
                        tue_time = details[8]

                    wed_time = input("Please enter the hours worked on Wednesday: ")

                    if wed_time == "":
                        wed_time = details[9]

                    thu_time = input("Please enter the hours worked on Thursday: ")

                    if thu_time == "":
                        thu_time = details[10]

                    fri_time = input("Please enter the hours worked on Friday: ")

                    if fri_time == "":
                        fri_time = details[11]

                    sat_time = input("Please enter the hours worked on Saturday: ")

                    if sat_time == "":
                        sat_time = details[12]

                    sun_time = input("Please enter the hours worked on Sunder: ")

                    if sun_time == "":
                        sun_time = details[13]

                    print(
                        mon_time   " "   tue_time   " "   wed_time   " "   thu_time   " "   fri_time   " "   sat_time   " "   sun_time)

                    confirmation = input("Are you sure this data is correct? [Y] or [No]: ")
                    if confirmation == "Y" or confirmation == "y":
                        newline = mon_time   ","   tue_time   ","   wed_time   ","   thu_time   ","   fri_time   ","   sat_time   ","   sun_time   "n"
                        newfile.remove(line)
                        newfile.append(newline)
                        completion = True
                        editfile.close()
                        editfile = open("CafeTestData.csv", "w")
                        editfile.writelines(newfile)
                        editfile.close()

                    if confirmation == "N" or confirmation == "n":
                        completion = False
 

Ответ №1:

Я в основном работаю с библиотекой Панд, которую я определенно рекомендую вам, но вы, возможно, захотите попробовать a вместо w этого добавить специальный символ:

 open("CafeTestData.csv", "a").write(text)