2015-09-01 2 views
0

Я использую устройство чтения магнитных карт для чтения ввода с магнитных карт. Карты имеют три дорожки, но каждый трек содержит одинаковые точные данные на каждой дорожке. Когда я сажу карточку, первый трек записывается в переменную, а затем записывается в файл csv для последующего использования. Проблема заключается в том, что после считывания каждой дорожки вводится символ возврата, так что цикл while, который я запускаю, считывает и записывает одни и те же данные три раза для каждой карты. Есть ли способ, по которому я могу сделать первые два значения null, так что я получаю только данные, написанные один раз, или есть какой-либо другой способ, которым я могу это сделать, так что я получаю текст один раз, а данные записываются один раз для каждой карточки ? Если у вас есть какие-либо вопросы по этому поводу, дайте мне знать. Я попытался сказать это, насколько это возможно. Я также включу код.Чтение и запись ввода магнитных карт с помощью Python

#Card Reader 
    import getpass 
    import datetime 
    import csv 
    import os 
    full_date = str(datetime.datetime.now()) 
    short_date = full_date[5:10] 
    print(short_date) 
    while True: 
     while True: 
      try: 
       ID = getpass.getpass(prompt = 'Please swipe your ID card. ') 
       if os.path.exists('.\attendance.csv'): 
        student_number = open('.\attendance.csv', 'a') 
        student_number.write(ID[1:10] + '\n') 
        print('') 
       else: 
        student_number = open('.\attendance.csv', 'w') 
        student_number.write(ID[1:10] + '\n') 
        print('') 
      except KeyboardInterrupt: 
       break 
+0

Почему двойные циклы 'while True'? – Juxhin

+0

У меня было больше кода между ними в какой-то момент, но он вытащил его и просто не поймал. Я собирался убрать его позже. Поэтому нет причин для этого. Спасибо, что поймали это! – law10

+0

Если значения идентичны и имеют одинаковую длину, почему бы не взять список значений и не сломать после индекса 'n', где' n' - длина требуемого значения? – Juxhin

ответ

1

Вы можете использовать счетчик, чтобы отслеживать количество возвращаемых значений.

counter = 0 
while True: 
    ID = getpass.getpass(prompt = 'Please swipe your ID card.') 
    if counter < 3: 
     counter += 1 
    else: 
     counter = 0 
     if os.path.exists('.\attendance.csv'): 
      student_number = open('.\attendance.csv', 'a') 
      student_number.write(ID[1:10] + '\n') 
      print('') 
     else: 
      student_number = open('.\attendance.csv', 'w') 
      student_number.write(ID[1:10] + '\n') 
      print('') 

Поскольку вы разрабатываете устройство для чтения карт, можно с уверенностью предположить, что другая карта красть не будет мешать прилавок и посещаемость каждого студента будет написана только один раз.

+0

Я думал о чем-то подобном, пытаясь решить его сам. Я попытался реализовать его, а затем попытался реализовать ваш. К сожалению, это не устранило проблему. Вероятно, я виноват, что не очень хорошо объяснил. Когда я прокручиваю магнитную карточку, он делает следующее: 1. Выводит строку текста (я считаю 12 или 13 символов) 2. Карточка (или устройство чтения карт, я не уверен, что это делает) вводит символ возврата 3 . Тот же текст в первой строке снова печатается на следующей строке из-за введенного символа возврата. Затем шаги 2 и 3 повторяются второй раз. – law10

+0

Из-за этого программа заканчивается три раза и записывает номер 3 раза для каждой карты, а не только один раз. Есть ли способ, которым я могу заставить его прекратить чтение после первого трека или каким-то образом сделать возвращаемые символы нулевыми, чтобы все три трека записывались как одна переменная? – law10

Смежные вопросы