0

我有一个文件,我已读入一个列表,该列表存储 xyz 坐标以在 pygame 中绘制线条。

该文件采用以下格式:

 -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

我只需要将数字和 j(jump) 存储到列表中,其他我不需要。我将如何编码?

我尝试了以下方法,但无法使其正常工作:

with open('C:\\Python33\\PIXB.DAT', 'r') as file:
    for line in file:
        line = line.split('#')

我运行该代码,它从我的列表中删除了整个第一行:

-2000 -2000 -2000 # THE FRAME, origin point, 1

然后我的其余值仍然有 #( 后跟一个数字。

我想要以下输出:

['   -2000 -2000   -2000\n', '   -2000   379  -2000\n', '   2000   379  -2000\n', '   2000 -2000  -2000\n', '   -2000 -2000   -2000', 'J\n', '  2000 -2000   -1190\n', '     2000 -2000  -1190\n',]

我想要一个像(上图)这样的输出,所以我可以把它变成一组有序对,而 J 变成一个像(下图)这样的跳跃位:

[-2000, -2000, -2000],[-2000, 379, -2000],[2000, 379, -2000],[2000, -2000, -2000],[-2000, -2000, -2000],[JUMP],etc...
4

1 回答 1

0

如果您只想要行中的前三个数字(除了j行),您可以执行以下操作:

results = []
with open('C:\\Python33\\PIXB.DAT', 'r') as file:
    for line in file:
        values = line.split() # splits on any whitespace
        if len(values) > 1 # not the j line
            results.extend(values[:3]) # add three values to the results list
        else:
            results.append(values[0]) # add the "j" to the list

对于您的示例数据,这将results等于:

['-2000', '-2000', '-2000', '-2000', '379', '-2000', '2000', '379', '-2000', '2000', '-2000 '、'-2000'、'-2000'、'-2000'、'-2000'、'j'、'2000'、'379'、'-1190'、'2000'、'-2000'、'- 1190','-2000','-2000','-1190']

如果您想将每行的三个值转换为整数,而不是将它们保留为字符串,您可以将extend上面的调用更改为:

results.extend(int(x) for x in values[:3])

如果您想将每行的三个数字保持在一起,而不是将它们展平在结果列表中,请更改extendappend(如果要将值转换为 s,则将其放在生成器表达式中tuple(...)或周围)。[...]int

于 2013-10-05T01:41:19.247 回答