#python #function #file #for-loop #count
Вопрос:
Я хотел бы считать или добавлять числа в файл каждый раз, когда я что-то в него добавляю.
Мое досье состоит из
Account|Username|Password
Я хотел бы, чтобы это было так всякий раз, когда пользователь добавляет другую учетную запись.
# Account Username Password 1 Facebook Name Pass
Мой код добавления учетной записи таков
def add_account(): acc = input("Enter the name of your account.") username = input(f"Enter the username of your {acc}") password = input(f"Enter the password of your {acc}") ask = input(f" Do you like to save {acc} credentials? Y|N") if ask == "Y": with open("myfile.txt", "a") as file: file.write("" "|" acc "|" username "|" password) file.close() add_accout() def view_account(): file = open("myfile.txt", "r") line = file.readline() for line in file: a, b, c, d = line.split("|") d = d.strip() print(formatStr(a), formatStr(b), formatStr(c), formatStr(d)) view_account() def formatStr(str): nochars = 15 return str (" "*(nochars - len(str))
Как я могу посчитать добавленные строки?
Комментарии:
1. Это вся ваша программа (которая добавляет не более одной учетной записи перед выходом)? Os есть ли в этом что-то еще?
2. Это еще не вся программа. Это просто часть «если». У меня с этим проблемы.
3. Если ваша цель-сообщить, сколько учетных записей было добавлено во время работы программы, то ведите глобальный подсчет и увеличивайте его каждый раз, когда вы добавляете учетную запись.
4. Не могли бы вы попробовать показать мне код? Я действительно не понимаю этого, извини.
5. Ах, перечитывая ваш вопрос, я вижу, что вы действительно хотите пронумеровать учетные записи в реальном файле, поэтому вам нужно знать последний добавленный номер, чтобы иметь возможность записать следующую учетную запись. Первое, что я бы сказал: не делай этого, если тебе не нужно. Индекс каждой учетной записи в файле неявно известен (поскольку учетная запись N находится в строке N 1).
Ответ №1:
Как предлагает Джармод в комментариях, вы можете использовать глобальную переменную подсчета для нумерации каждой добавленной учетной записи:
counting = 0 def add_account(): global counting acc = input("Enter the name of your account.") username = input(f"Enter the username of your {acc}") password = input(f"Enter the password of your {acc}") ask = input(f" Do you like to save {acc} credentials? Y|N") if ask == "Y": counting = 1 with open("myfile.txt", "a") as file: file.write("" acc username password str(counting)) file.close() add_account()
Комментарии:
1. Я пробовал, но счет всегда «1». Я сделал то, что вы мне сказали, но счет всегда выходит «1».
2. Вам нужно убедиться, что вы определили функцию и один раз инициализировали переменную подсчета. Затем вы вызываете только функцию
add_account()
, не переопределяя каждый раз глобальную переменную подсчета. В противном случае он будет каждый раз перезапускаться с 0.3. О, хорошо! Большое вам спасибо!
Ответ №2:
Если вам нужно выйти из программы, перезапустить ее позже и заставить ее найти последний номер учетной записи, хранящийся в вашей базе данных, вы можете сделать это следующим образом, чтобы рассчитать следующий бесплатный номер учетной записи:
SEPARATOR = '|' def next_account_number(): next_num = 1 with open("myfile.txt", "r") as f: # Read lines discarding empty lines lines = f.read().splitlines() lines = list(filter(lambda x: x != "", lines)) if len(lines) gt; 1: account = lines[-1].split(SEPARATOR) try: next_num = int(account[0]) 1 except ValueError: pass return next_num print("Next account number:", next_account_number())
Комментарии:
1. Есть ли другой способ без использования списка?
2. Есть ли у вас какое-то искусственное ограничение, которое означает, что вы не можете использовать
list
в своем решении? В чем именно заключается ограничение?3. Нам не разрешается использовать список или кортежи.