Форум сайта python.su
0
Доброго времени суток!
Очень сложная задачка, которую я не могу реализовать. Есть файл 2.txt, и много файлов от text_1.xls до text_M.xls. Нужно написать код, который выполняет следующие пункты задачи:
1. открываем файлы 2.txt, и сначала text_1.xls
2. ищем колонку t из файла 2.txt
3. берем для начала первое число из этой колонки
4. округляем его до десятых в меньшую сторону
5. ищем колонку Ttt из text_1.xls
6. смотрим не попадается ли это первое число в интервале чисел из колонки Ttt
7. если попадается, то смотрим в этой строчке, какому числу из колонки Bm равно числу N , которое соответствует этому времени. Запоминаем это число, так как в дальнейшем это число пригодится.
если не попадается, то открываем следующий по нумерации файл text_2.xls. проделываем такие же операции, какие указаны в пунктах: 5), 6) и 7) и т.д.
8. В зависимости от числа N из колонки Bm выбираем поля с названиями: X_1, …, X_N и Z_1, …, Z_N, также берем под этими полями строчку, которая соответствует этому времени, и вставляем всё это в новый файл out_1.xls. Если это число N из колонки Bm равно 0, то эту строчку не записываем в файл.
9. Если число отличное от 0, то в файл out_1.xls записываем поля №, t, Bm, X_1, …, X_N, Z_1, …, Z_N, C и под этими полями строчку, которая соответствует этому времени из файла 2.txt.
10. тоже самое проделывается с остальными числами из колонки t файла 2.txt
Несколько файлов для примера прикреплены (в архиве), чтобы можно было разобраться, если какие-то пункты задачи неясны. Данные собраны ручным способом.
Прикреплённый файлы:
example.rar (25,8 KБ)
Офлайн
857
whoami217Вот тоже интересно, потянет ли её vic57 .
Очень сложная задачка, которую я не могу реализовать.
Отредактировано py.user.next (Сен. 16, 2017 16:12:39)
Офлайн
py.user.nextу админов баз данных есть такая поговорка - чем сложнее надо делать запрос, тем тупее был разработчик
Вот тоже интересно, потянет ли её vic57 .
key:[val1,val2,...]
Отредактировано vic57 (Сен. 16, 2017 16:20:05)
Офлайн
0
vic57, вероятно мне стоило бы более подробно описать задачу. Но мне вручили этот архив с кучей файлов без подробных (да ни то что без подробных, даже без каких-либо) пояснений и попросили автоматизировать. Просмотрев архив, я сообразила, что можно так разбить на подзадачи.
Офлайн
whoami217
есть файл типа csv
читаем и преобразуем в словарь(dict)
data='''key0,key1,key2 00,01,02 10,11,12 20,21,22 ''' lst = [i.split(',') for i in data.split('\n') if i.strip()] out = [[] for i in range(len(lst[0]))] #print out for i in lst: for j in xrange(len(i)): out[j].append(i[j]) #print out In = {} for i in out: In[i[0]] = [float(j) for j in i[1:]] print In

Отредактировано vic57 (Сен. 16, 2017 17:23:22)
Офлайн
857
whoami217Странно. Если не шаришь, зачем давать такие задания? Может, уволить хотят или отчислить. У нас такое практиковалось в институте: когда хотели отчислить, сначала удерживали на слабом уровне (ставили оценки без сдачи), а потом резко давали какое-нибудь сложное задание и в больших объёмах, на неделю. Человек начинал бегать (паниковать) и попадался в ловушку, когда шёл делать это на заказ, ничего в этом не понимая. И когда делал, ему давали ещё, чтобы утопить окончательно. Так поотчисляли некоторых, которые думали (наивно полагали), что через взятки смогут до конца учиться, ничего не делая и ничего не понимая. А для института это был вопрос репутации, поэтому взятки-то они брали, но до конца старались никого не доводить из таких. Многие пропёрлись, так как думали, что до конца так будут учиться.
Но мне вручили этот архив с кучей файлов без подробных (да ни то что без подробных, даже без каких-либо) пояснений и попросили автоматизировать.
vic57Она его сама сгенерила. А надо было послать нахрен этого задавальщика.
поскольку ТЗ расписано мутно
Отредактировано py.user.next (Сен. 16, 2017 18:59:09)
Офлайн
py.user.next, с людями надо мягше
whoami217
для лучшего понимания
#!/usr/bin/env python2 #coding:utf-8 def fileToDict(fname,delim=None,endline='\r\n'): with open(fname) as f: lines = f.read().split(endline) lst = [] for line in lines: tmp = [i.strip() for i in line.split(delim) if i.strip()] lst.append(tmp) out = [[] for i in xrange(len(lst[0]))] for i in lst: for j in xrange(len(i)): out[j].append(i[j]) d = {} for i in out: d[i[0]] = [round(float(j),1) for j in i[1:]] return d d1 = fileToDict('2.txt','\t') d2 = fileToDict('text_1.csv',';') #2. ищем колонку t из файла 2.txt #3. берем для начала первое число из этой колонки t = d1['t'][0] #5. ищем колонку Ttt из text_1.xls Ttt = d2['Ttt'] #6. смотрим не попадается ли это первое число в интервале чисел из колонки Ttt #7. если попадается, то смотрим в этой строчке, # какому числу из колонки Bm равно числу N , которое соответствует этому времени. #? тут я что-то не въехал print 'Bm:',d1['Bm'] if t in Ttt: N = Ttt.index(t) print N,d1['Bm'][N]
Отредактировано vic57 (Сен. 16, 2017 19:45:04)
Офлайн
0
vic57
#6. смотрим не попадается ли это первое число в интервале чисел из колонки Ttt
#7. если попадается, то смотрим в этой строчке,
# какому числу из колонки Bm равно числу N , которое соответствует этому времени.
#? тут я что-то не въехал
Отредактировано whoami217 (Сен. 17, 2017 10:57:39)
Офлайн
в какие данные ты берешь из файла text_1.xls ? зачем он вообще нужен?
ты зачем-то проверяешь совпадение 2.txt c text_1.xls, а
все данные забираешь из 2.txt.
ИМХО я бы делал так - если анализируемый файл text_N.xls,
то выходной файл - out_N.xls, а так у тебя логическая дыра получается
Офлайн
0
vic57
какие данные ты берешь из файла text_1.xls ?беру данные только из колонки Ttt.
зачем-то проверяешь совпадение 2.txt c text_1.xlsпотому что сделали на этом акцент, когда давали задание. хотя особо смысла в этом не вижу. плюс беру 2.txt, потому что не все данные нужны из файла 2.txt.
я бы делал так - если анализируемый файл text_N.xls,может действительно сделать так… только вместо text_N.xls нужно взять 2.txt, так как оттуда берутся данные. да и строки с Bm = 0 не берутся в рассмотрение.
то выходной файл - out_N.xls, а так у тебя логическая дыра получается
Отредактировано whoami217 (Сен. 17, 2017 16:10:46)
Офлайн