Нумерация или подсчет добавленных строк в python

#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. Нам не разрешается использовать список или кортежи.