我有一个名为datapolygon.txt的文本文件,其中包含:
Polygon In [(2,0),(3,0),(3,-2),(2,-2)] [(3,0),(4,0),(4,-2),(3,-2)]
我想将该文本值分配给二维列表(列表列表)。 结果应该是这样的:
polygonIn = [[(2,0),(3,0),(3,-2),(2,-2)],[(3,0),(4,0),(4,-2),(3,-2)]]是否有任何简单的方法来实现除了通过一些复杂的循环并检查每个子串和索引然后将其转换为int并使其成为元组然后使用嵌套循环将其分配给变量polygonIn?
答案 0 :(得分:4)
您可以使用ast.literal_eval()
将字符串转换为列表:
>>> import ast
>>> s = '[(2,0),(3,0),(3,-2),(2,-2)]'
>>> print(ast.literal_eval(s))
[(2, 0), (3, 0), (3, -2), (2, -2)]
您只需附加到空列表即可。这是一个例子:
import ast
polygon_in = []
with open('polygon.txt', 'r') as f:
polygon_str = f.readline()
polygon_in.append(ast.literal_eval(polygon_str))
答案 1 :(得分:4)
假设您可以确保您的行是有效的元组列表(或其他一些有效的数据类型),您可以使用
import ast
ast.literal_eval(line)
其中line
是您从文件中读取的行。
如果您知道自己有示例中显示的元组和标签列表,则可以使用^\[([\(\-[0-9],)\s]*\]
这样的正则表达式来确保它是数据行之一。
答案 2 :(得分:0)
Selcuk's answer上的小猪支持:
import ast
def processFile (filename):
theFile = open(filename, 'r')
finalList = []
for aLine in theFile:
try:
finalList.append(ast.literal_eval(aLine))
except:
useless = True
return finalList