Skip to main content
 首页 » 编程设计

Python,需要帮助将文本文件中的项目解析为列表

2025年05月04日9zhujiabin

我正在尝试解析文本文件中的项目并将它们存储到列表中。数据看起来像这样:

[(0, 0, 0), (1, 0, 0), (2, 0, 0), (3, 0, 0), (4, 0, 0), (5, 0, 0), (6, 0, 0)] 
[(10, 3, 1), (11, 3, 1), (12, 3, 1), (13, 3, 1), (13, 4, 1)] 
[(10, 3, 5), (11, 3, 5), (12, 3, 5), (13, 3, 5), (13, 4, 5), (13, 5, 5), (13, 6, 5)] 
[(6, 13, 5), (7, 13, 5), (8, 13, 5), (8, 14, 5), (7, 14, 5), (6, 14, 5), (6, 14, 6)] 

我能够去除“[”和“]”,但无法将其余信息存储到列表中,格式如下: (x,y,z)。有帮助吗?

 def dataParser(fileName): 
    zoneList=[]; zone=[] 
    input=open(fileName,"r") 
 
    for line in input: 
        vals = line.strip("[") 
        newVals = vals.strip("]\n") 
 
        print newVals 
        v=newVals[0:9] 
        zone.append(v) 
 
    input.close() 
    return zone 

请您参考如下方法:

在这种特殊情况下,您可以使用 ast.literal_eval:

>>> with open("list.txt") as fp: 
...     data = [ast.literal_eval(line) for line in fp if line.strip()] 
...  
>>> data 
[[(0, 0, 0), (1, 0, 0), (2, 0, 0), (3, 0, 0), (4, 0, 0), (5, 0, 0), (6, 0, 0)], [(10, 3, 1), (11, 3, 1), (12, 3, 1), (13, 3, 1), (13, 4, 1)], [(10, 3, 5), (11, 3, 5), (12, 3, 5), (13, 3, 5), (13, 4, 5), (13, 5, 5), (13, 6, 5)], [(6, 13, 5), (7, 13, 5), (8, 13, 5), (8, 14, 5), (7, 14, 5), (6, 14, 5), (6, 14, 6)]] 

它是eval 的“安全”版本。不过,正是出于这个原因,它并不那么普遍。如果您正在生成此输入,您可能需要研究一种不同的方式来保存您的数据(“序列化”),无论是使用 pickle 还是类似 JSON 的东西——您可以在 SO 和其他地方找到很多使用这两种方法的示例。