如何使用 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))
按照以下步骤操作:
打开 MFRC522.py
>> RFID 的头文件 Reader
vi MFRC522.py
寻找函数
def MFRC522_Read(self, blockAddr)
在函数末尾添加这一行 return backData
。
保存。
- 在 read() 程序中,调用它
DATA=(MIFAREReader.MFRC522_Read(8))
print 'DATA :',DATA
我希望这能解决问题。
我正在为我的项目使用 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))
按照以下步骤操作:
打开
MFRC522.py
>> RFID 的头文件 Readervi MFRC522.py
寻找函数
def MFRC522_Read(self, blockAddr)
在函数末尾添加这一行 return backData
。
保存。
- 在 read() 程序中,调用它
DATA=(MIFAREReader.MFRC522_Read(8))
print 'DATA :',DATA
我希望这能解决问题。