【问题标题】:Reading and writing magnetic card reader input with Python用 Python 读写磁卡读卡器输入
【发布时间】:2015-09-01 18:12:21
【问题描述】:

我正在使用磁卡读卡器从磁卡中读取输入。这些卡有三个轨道,但每个轨道在每个轨道上都包含相同的精确数据。当我刷卡时,第一个轨道被写入一个变量,然后写入一个 csv 文件供以后使用。问题是,在读取每个磁道后,输入一个返回字符,以便我正在运行的 while 循环为每张刷卡读取和写入相同的数据 3 次。有什么方法可以让前两个返回 null 以便我只获得一次写入的数据,或者有没有其他方法可以做到这一点,以便我只获得一次文本和为每张卡写入一次的数据?如果您对此有任何疑问,请告诉我。我试图尽可能清楚地表达它。我还将包括代码。

    #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

【问题讨论】:

  • 为什么双 while True 循环?
  • 我在某个时间点之间有更多的代码,但把它拿出来,就再也没有抓住它。我打算稍后清理它。所以,没有理由这样做。不过还是谢谢你!
  • 如果值相同且长度相同,为什么不获取值列表并在n 索引后中断,其中n 是所需值的长度?

标签: python csv magnetic-cards cardreader


【解决方案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('')

由于您正在开发读卡器,因此可以安全地假设另一次刷卡不会干扰柜台,并且每个学生的出勤情况只会被写入一次。

【讨论】:

  • 我在尝试自己解决它时正在考虑这样的事情。我尝试实现它,然后也尝试实现你的。不幸的是,这并没有解决问题。解释不好可能是我的错。当我刷磁卡时,它会执行以下操作: 1. 输出一串文本(我相信 12 或 13 个字符长) 2. 卡(或读卡器,我不确定是哪个在执行此操作)输入返回字符 3 . 由于输入了返回字符 4,第一个字符串中的相同文本在下一行再次打印。然后第二次重复步骤 2 和 3。
  • 因此,程序最终会运行 3 次,并为每张卡记录 3 次数字,而不是只记录一次。有没有办法让它在第一首曲目之后停止阅读,或者以某种方式使返回字符为空,以便将所有 3 首曲目记录为一个变量?
猜你喜欢
  • 2014-02-23
  • 1970-01-01
  • 2017-06-06
  • 2014-09-17
  • 2016-03-30
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多