Функция для записи данных текстового файла (.obj) в список питонов заполняет список последним элементом в файле данных - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь сохранить информацию о координатах файла .obj в многомерном списке Python.Каждый элемент списка «куб» представляет собой 8 наборов трехмерных координат.

Код работал нормально, пока я не превратил его в функцию.Кажется, проблема в цикле for, который я сделал для анализа данных, но я не вижу, что не так.

Файл данных выглядит следующим образом (вставлены только первые два объекта (кубы, поскольку все они кубы).)): https://pastebin.com/U7dmCsC3

def read_obj(file, filepath):
    # count number of distinct objects (cubes)
    o = 0
    for line in fyle:
        if line[0] == "o":
            o += 1
    print("number of cubes =", o)

    # generate array with size = number of cubes
    vec = [0.0] * 3
    arr = [vec] * 8
    cube = [arr] * o
    # each element of cube is an array of
    # the 8 co-ordinates that make up the cube
    i = -1
    j = 0
    for line in open(filepath):
        # 
        vec_line = line.split(" ")
        if line[0] == "o":
            i += 1
            j = 0
        if line[0] == "v" and line[1] == " ":
            cube[i][j] = [float(vec_line[1]),
            float(vec_line[2]),float(vec_line[3])]
            j += 1

    return cube

Чтобы запустить его,

cube = read_obj(fyle, filepath)

Где путь к файлу выбирается с помощью tkinter, и

fyle = open(filepath,"r")

Каждый раз, когда буква "o "читается, функция должна записать следующие координаты в куб [i] в ​​цикле for до следующего" o ", а затем перейти к кубу [i + 1] и так далее.У меня проблема в том, что каждая строка куба одинакова - координаты последнего объекта в файле данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...