我正在为我的项目使用RC-522 RFID阅读器。我想用它来支付运费。我正在使用python并使用以下代码:https://github.com/mxgxw/MFRC522-python.git
在python脚本Read.py上,使用此代码读取了Sector 8:
# Check if authenticated
if status == MIFAREReader.MI_OK:
MIFAREReader.MFRC522_Read(8) <---- prints the sector 8
MIFAREReader.MFRC522_StopCrypto1()
else:
print "Authentication error"
这个的输出是:
Sector 8 [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
那么最后一部分(Sector 8 [100,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),我将它转换为字符串。我希望这是一个清单,但我不能。试图将它放在变量x上并使用x.split()但我执行print(x)时的输出是&#34;无&#34;。
x = str(MIFAREReader.MFRC22_READ(8))
x = x.split()
print x #PRINTS ['NONE']
我希望它是这样的:
DATA = [100,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
这样我就可以使用总和(DATA)来检查余额,我可以使用像DATA [0]
这样的索引来访问它非常感谢!!
答案 0 :(得分:1)
请按照以下步骤操作:
打开MFRC522.py
&gt;&gt; RFID阅读器的头文件
vi MFRC522.py
寻找功能
def MFRC522_Read(self,blockAddr)
在函数末尾添加此行return backData
。
保存。
DATA=(MIFAREReader.MFRC522_Read(8))
print 'DATA :',DATA
我希望这能解决问题。
答案 1 :(得分:0)
您可以使用.split(“,”)指定分隔符“,”。
类似的东西:
1151
打印
{{1}}
答案 2 :(得分:0)
如果您对该列表中数据的来源和性质有所保证(并且您知道格式将始终相同),Python's eval
将起作用。例如:
original_string = 'Sector 8 [100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]'
data_start_index = original_string.index('[') # find '['
data_string = original_string[data_start_index:] # extract the list
data = eval(data_string)
print(type(data)) # <class 'list'>
print(sum(data)) # 101
如果您没有这些保证,由于split
的脆弱性和可利用性,您必须使用Moutch建议的eval
方法 - 它会盲目执行任何(潜在的恶意)代码都传递给它。
修改:使用ast.literal_eval
代替普通旧eval
以确保安全。这仍然要求字符串的格式是一致的(例如,它总是有方括号),以便正确评估Python列表。
答案 3 :(得分:0)
根据Moutch的回答,使用列表理解:
input='[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]'
DATA = [int(item) for item in input[1:-1].split(',')]
print(sum(DATA))
如果数据字符串是Read.Py
的整个输出input="""Card read UID: 67,149,225,43
Size: 8
Sector 8 [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]"""
#find index position of 'Sector' text and select from this using slices.
inputn = input[input.index('Sector')+9:]
DATA = [int(item) for item in inputn[1:-1].split(',')]
print(DATA)
print(sum(DATA))