У меня есть программа для создания адресной книги, и я хочу иметь возможность подтвердить изменение записи, прежде чем сделать это - если я ищу фамилию «Петерсон» и есть две записи, я могу выбратьизменить один, оба или ни одного.Я пытаюсь использовать в основном один и тот же код для редактирования существующей строки или удаления ее из программы.Я новичок в Python, и это мой последний проект для класса, и я потратил около четырех дней, пытаясь выяснить, что не работает.Я просматривал Stack Overflow и не нашел удовлетворительного ответа на мою проблему, и я уверен, что это потому, что я недостаточно хорошо понимаю Python.Мы должны использовать настройку создания и переименования временного файла, поэтому, хотя я знаю, что это не самый эффективный способ, это то, что я должен делать.
Это то, что у меня есть:
import os
FIRSTNAME = 0
LASTNAME = 1
STREETADDRESS = 2
CITY = 3
STATE = 4
ZIP = 5
TELEPHONE1 = 6
TELEPHONE2 = 7
def modify():
found = False
search = input("Enter an item to search for: ")
new = input("And what should we change it to? ")
addressbook = open("addressbook.txt", "r")
temp_file = open("temp.txt", "w")
line = addressbook.readline()
while line != "":
line = line.rstrip("\n")
lineInfo = line.split("|")
if lineInfo[1] == search:
print("I found it!")
print(format(lineInfo[FIRSTNAME], '15s'),format(lineInfo[LASTNAME], '15s'),format(lineInfo[STREETADDRESS], '20s'),format(lineInfo[CITY], '10s'),
format(lineInfo[STATE], '5s'),format(lineInfo[ZIP], '10s'),format(lineInfo[TELEPHONE1], '15s')," ",format(lineInfo[TELEPHONE2], '10s'))
print()
delete = input("change this one? press y for yes.")
if delete == "y":
found = True
lineInfo[1] = new
temp_file.write(format(lineInfo[FIRSTNAME])+"|")
temp_file.write(format(lineInfo[LASTNAME])+"|")
temp_file.write(format(lineInfo[STREETADDRESS])+"|")
temp_file.write(format(lineInfo[CITY])+"|")
temp_file.write(format(lineInfo[STATE])+"|")
temp_file.write(format(lineInfo[ZIP])+"|")
temp_file.write(format(lineInfo[TELEPHONE1])+"|")
temp_file.write(format(lineInfo[TELEPHONE2])+"|")
temp_file.write("\n")
else:
temp_file.write(line)
temp_file.write("\n")
else:
temp_file.write(line)
temp_file.write("\n")
line = addressbook.readline()
temp_file.close()
os.rename("temp.txt","newaddress.txt")
if found:
print("File has been changed")
else:
print("File was not found")
modify()
В настоящее время, когда я запускаю его, я получаю это:
Enter an item to search for: Peterson
And what should we change it to? Patterson
I found it!
Edward Peterson 10 Grand Pl
Kearny NJ 90031 383-313-3003 xxx
change this one? press y for yes.n
I found it!
James Peterson 11 Grand Pl
Kearny NJ 90021 xxx xxx
change this one? press y for yes.y
Traceback (most recent call last):
File "C:\Users\kendr\Desktop\Address Book\Delete Address Book.py", line 53, in <module>
delete()
File "C:\Users\kendr\Desktop\Address Book\Delete Address Book.py", line 22, in delete
if lineInfo[1] == search:
IndexError: list index out of range
Честно говоря, я в своем уме с этим заданием, так что любая помощь будет иметь огромное значение.Спасибо, К