从文件中读取特定值并将其存储到Python列表中

4
我有一个文件,格式如下:
-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

这感觉像是似曾相识。 - Games Brainiac
@GamesBrainiac,http://stackoverflow.com/questions/19602621/storing-data-from-a-file-into-a-list-python :) - JadedTuna
@Vik2015 哦,原来如此。 - Games Brainiac
我们的任何答案都回答了你的问题吗? - Games Brainiac
4个回答

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]

无论每行有多少列或行,这都可以正常工作。

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列的行的前三列,并将所有值转换为浮点数。


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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接