从文件中读取特定值并将它们存储在列表python中

时间:2013-10-26 11:52:31

标签: python list coordinates

我有一个以下格式的文件:

-2000 -2000 -2000 # (*THE FRAME, origin point*), 1
-2000 379 -2000 # 2
 2000 379 -2000 # 3
 2000 -2000 -2000 # 4
-2000 -2000 -2000 # 1
j
 2000 379 -1190 # 7
 2000 -2000 -1190 # 8
-2000 -2000 -1190 # 5

我需要在python中读取此文件并将其以下列格式存储在列表中:

[[[-2000, -2000, -2000], [-2000 379 -2000], [2000, 379, -2000], [2000, -2000, -2000], [-2000, -2000, -2000]],[[2000, 379, -1190], [2000, -2000, -1190], [-2000, -2000, -1190]]] 

到目前为止,我已阅读该文件并将值存储在列表中

file = open('filename', 'r')
vlist = file.readlines()
file.close

然后我将每个“j”值转换为[-1,-1,-1]并将该值用作列表之间的间隔。

points = []
points = [list(map(int,elem.split())) if elem.strip().lower() != "j" else [-1, -1, -1]     for elem in vlist]

然后使用itertools我可以将此列表拆分为每次在列表中出现[-1,-1,-1]时分割的组:

pointLists = [list(group) for val, group in groupby(points, lambda x: x == [-1,-1,-1]) if not val]

我相信这会给我我想要的输出,但它不适用于我出现在顶部的文件示例,因为它不会删除#及其后面的值。

我不知道如何去除列表中的#和值,以便任何帮助都是一个很好的帮助谢谢。

enter code here

4 个答案:

答案 0 :(得分:3)

因为在最终结果中你实际上并不需要[-1,-1,-1]

with open('stuff') as f:
    list1 = [line.strip().split('#')[0].split() for line in f]
    print [[map(int, var) for var in g] for k, g in groupby(list1, key=lambda x: len(x)==1) if k != 1]

无论每行有多少列或行,这都会有效。

答案 1 :(得分:0)

您可以尝试以下操作:

with open(filename) as f:
    lines = [l.split() for l in f.readlines()]
lines = [map(float, l[:3]) for l in lines if len(l)>=3]

这将仅使用> = 3列的行的三个第一列,并将所有值转换为float。

答案 2 :(得分:0)

该代码可以满足您的需求

file = open('test', 'r')
lines = file.readlines()
file.close

a = []
b = []
t = a
for line in lines:
    temp = line.split('#')
    if len(temp) == 1:
        t = b
        continue
    t.append(map(int, temp[0].strip().split(' ')))

list = [a,b]
print list

答案 3 :(得分:0)

使用正则表达式...

import re
f = open("file.txt")
data = f.readlines()
f.close()
output = []
final = []
for line in data:
    l = re.findall("[0-9\-]+|[j]", re.sub("[#](.+)", "", line))
    if l == ['j']:
        final.append(output)
        output = []
        continue
    output.append([float(i) for i in l])
if output:
    final.append(output)
for i in final: print i