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

How to convert a string to list using python?

我正在为我的项目使用 RC-522 RFID Reader。我想用它来支付交通费。我正在使用 python 并使用以下代码:https://github.com/mxgxw/MFRC522-python.git

在 python 脚本 Read.py 上,扇区 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]

所以最后一部分(扇区 8 [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),我将其转换串起来。我希望这是一个列表,但我不能。试图将它放在变量 x 上并使用 x.split() 但我执行 print(x) 时的输出是 "None".

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, 0]

这样我就可以使用 sum(DATA) 来检查余额,我可以使用像 DATA[0]

这样的索引来访问它

非常感谢!!

您可以使用.split(",") 指定分隔符","。

类似的东西:

input_string = "[100, 234, 0, 0, 567, 0, 0, 0, 3, 0, 235, 0, 0, 12, 0, 0]"

listed_string = input_string[1:-1].split(",")
sum = 0

for item in listed_string:
    sum += int(item)

print(sum)

打印

1151

如果您对该列表中数据的来源和性质有一定的保证(并且您知道格式将始终相同),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

如果你没有这些保证,你将不得不使用 Moutch 建议的 split 方法,因为 eval 的脆弱性和可利用性 - 它盲目地执行任何(潜在恶意)代码传递给它。

编辑:为了安全保证,使用ast.literal_eval代替普通的旧eval。这仍然需要字符串的格式保持一致(例如,它始终有方括号)以便正确评估 Python 列表。

根据 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))

按照以下步骤操作:

  1. 打开 MFRC522.py >> RFID 的头文件 Reader

    vi MFRC522.py

    寻找函数

def MFRC522_Read(self, blockAddr)

在函数末尾添加这一行 return backData

保存。

  1. 在 read() 程序中,调用它

DATA=(MIFAREReader.MFRC522_Read(8)) print 'DATA :',DATA

我希望这能解决问题。