Форум сайта python.su
0
Здравствуйте, задача такая: в директории есть r*.txt структуры 1стр: название 2+стр: минута , координаты x, y, z (разбиты пробелами). файлы должны быть загружены в класс samolet() - но у меня проблема - во все экземпляры пишется содержимое 1 файла - но найти ошибку не могу все проходит нормально до (__1__) но отследить не могу в чем ошибка. прилагаю все файлы проекта
def main(): import glob # для работы с директорией der = glob.glob("r*.txt")#все файлы r.txt klas_list = []# список всех классов for i in range(0,len(der)):# перебор всех текстовых файлов klas_list.append(der[i])# добавление классов в список klas_list[i] = samolet() # создаем экземпляр класса и вносим его в лист for st in open(der[i]): # заполняем экземпляр класса klas_list[i].data.append(st.split()) # тут вводятся разбитые данные (__1__) ## блок проверки__________________________________________ for q in range (0,len(klas_list)): print(klas_list[q].name()," - рейсы",q) print(der,"файлы в директории") print(klas_list,"имена классов") print(klas_list[0].name(),"1class") print(klas_list[1].name(),"2class") print(klas_list[2].name(),"3class") ##______________________________________________________ class samolet(): def __init__(self,d=[]): self.data = d#лист данных(по строчно def name(self): return self.data[0] def pos_x(self,t):# возращает кординату х для времени т return self.data[t][1] def pos_y(self,t):# возращает кординату у для времени т return self.data[t][2] def pos_z(self,t):#возращает кординату z для времени т return(self.data[t][3]) if __name__ == "__main__": main()
Отредактировано sashazz (Авг. 24, 2015 10:37:54)
Прикреплённый файлы:
samolet.rar (2,0 KБ)
Офлайн
253
оборачивайте код в теги <>
Иначе логика вашего скрипта неоднозначна
klas_list.append(der)
for i in glob.glob("*,*"): ....
Офлайн
0
Увы в книжках таково не могу найти - про динамическое создание ни слова. Ну в klas_list.append(der) - видно опечатка - а так в этот List заносятся все названия соответствующие маске r*.txt. От range отказаться не могу - иначе никак не смогу обращаться к экземплярам класса samolet(). насчет тегов извините не знал - но для этого я исходники и приложил. Мне пока главное чтобы скрипт заработал - оптимизацией займусь потом. Повторюсь - вся проблема в том что в экземпляры класса заносятся данные из первого файла (по при этом обрабатываются все файлы)а не из всех из der
Офлайн
253
Это не файл один открывается, это данные в классах совпадают.
class samolet(): def __init__(self,d=[]): self.data = d#лист данных(по строчно
klas_list[i] = samolet()
#!/bin/env/python # -*- coding:utf-8 -*- import numpy as np import glob # для работы с директорией def main(): klas_list = [samolet(i) for i in glob.glob("r*.txt")]# список всех классов ## блок проверки__________________________________________ print(klas_list) class samolet(): def __init__(self,file_name): with open(file_name,"r") as f: self.name, tmp, self.tag = f.readline().split() self.data = np.loadtxt(f) self.pos_x, self.pos_x, self.pos_x,tmp = self.data.T def __repr__(self): return self.name+" \n"+str(self.data) if __name__ == "__main__": main()
Отредактировано doza_and (Авг. 24, 2015 23:53:15)
Офлайн
0
спасибо что разъяснили, буду перебивать ваш пример (чтобы понять - как это сделать без numPy ) а за вид оформления сор - но мне главное чтобы работало - будет опыт будет и оптимизация
Офлайн
253
sashazzЭта постановка задачи мне кажется ошибочной. Numpy есть, ставится на многие платформы, Без него весь ваш код наполнится горой циклов, и станет во много раз медленнее. Зачем?
как это сделать без numPy
Офлайн
0
да через pip не ставится (надо ставить еще сторонние библиотеки, а пк еле дышит) - мне главное чтобы работало сразу без плясок - можно и медленно+ задача для учебных целей. но очень большое спасибо за пример хоть с места сдвинусь
Отредактировано sashazz (Авг. 25, 2015 18:13:35)
Офлайн
253
Это винда компилировать не умеет. скачиваете отсюда http://www.lfd.uci.edu/~gohlke/pythonlibs/ и ставите. pip install numpy…whl никаких особых плясок. Питон без numpy это половина питона.
Офлайн