如何使用python将字符串转换为列表?

时间:2017-07-11 15:27:45

标签: python string list rfid

我正在为我的项目使用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]

这样的索引来访问它

非常感谢!!

4 个答案:

答案 0 :(得分:1)

请按照以下步骤操作:

  1. 打开MFRC522.py&gt;&gt; RFID阅读器的头文件

    vi MFRC522.py

    寻找功能

  2.   

    def MFRC522_Read(self,blockAddr)

    在函数末尾添加此行return backData

    保存。

    1. 在read()程序中,将其称为
    2. 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))