Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 16, 2017 14:11:57

whoami217
Зарегистрирован: 2017-09-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

Доброго времени суток!
Очень сложная задачка, которую я не могу реализовать. Есть файл 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

Несколько файлов для примера прикреплены (в архиве), чтобы можно было разобраться, если какие-то пункты задачи неясны. Данные собраны ручным способом.

Прикреплённый файлы:
attachment example.rar (25,8 KБ)

Офлайн

#2 Сен. 16, 2017 16:07:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10012
Репутация: +  857  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

whoami217
Очень сложная задачка, которую я не могу реализовать.
Вот тоже интересно, потянет ли её vic57 .
Короче, кто функции не применяет, тот потом в такую ловушку и попадает.



Отредактировано py.user.next (Сен. 16, 2017 16:12:39)

Офлайн

#3 Сен. 16, 2017 16:18:35

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

py.user.next
Вот тоже интересно, потянет ли её vic57 .
у админов баз данных есть такая поговорка - чем сложнее надо делать запрос, тем тупее был разработчик
алгоритм такой - преобразовать в csv, csv преобразовать в словарь типа
key:[val1,val2,...]
и делать поиск по словарям. реализовывать мне лениво, поскольку ТЗ расписано мутно
нету тела кода - нету дела ответа

Отредактировано vic57 (Сен. 16, 2017 16:20:05)

Офлайн

#4 Сен. 16, 2017 16:42:27

whoami217
Зарегистрирован: 2017-09-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

vic57, вероятно мне стоило бы более подробно описать задачу. Но мне вручили этот архив с кучей файлов без подробных (да ни то что без подробных, даже без каких-либо) пояснений и попросили автоматизировать. Просмотрев архив, я сообразила, что можно так разбить на подзадачи.

Офлайн

#5 Сен. 16, 2017 17:16:57

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

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
получаете структуру типа ключ:массив значений
почитайте про dict
все у вас получится, я в вас верю
ЗЫ не торопитесь сразу что-то писать в файл, сформируете выходной массив, тогда и запишете
ЗЗЫ если данных много, может в лучше БД преобразовать?

Отредактировано vic57 (Сен. 16, 2017 17:23:22)

Офлайн

#6 Сен. 16, 2017 18:54:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10012
Репутация: +  857  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

whoami217
Но мне вручили этот архив с кучей файлов без подробных (да ни то что без подробных, даже без каких-либо) пояснений и попросили автоматизировать.
Странно. Если не шаришь, зачем давать такие задания? Может, уволить хотят или отчислить. У нас такое практиковалось в институте: когда хотели отчислить, сначала удерживали на слабом уровне (ставили оценки без сдачи), а потом резко давали какое-нибудь сложное задание и в больших объёмах, на неделю. Человек начинал бегать (паниковать) и попадался в ловушку, когда шёл делать это на заказ, ничего в этом не понимая. И когда делал, ему давали ещё, чтобы утопить окончательно. Так поотчисляли некоторых, которые думали (наивно полагали), что через взятки смогут до конца учиться, ничего не делая и ничего не понимая. А для института это был вопрос репутации, поэтому взятки-то они брали, но до конца старались никого не доводить из таких. Многие пропёрлись, так как думали, что до конца так будут учиться.

vic57
поскольку ТЗ расписано мутно
Она его сама сгенерила. А надо было послать нахрен этого задавальщика.



Отредактировано py.user.next (Сен. 16, 2017 18:59:09)

Офлайн

#7 Сен. 16, 2017 19:40:46

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

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)

Офлайн

#8 Сен. 17, 2017 10:57:01

whoami217
Зарегистрирован: 2017-09-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

vic57

#6. смотрим не попадается ли это первое число в интервале чисел из колонки Ttt
#7. если попадается, то смотрим в этой строчке,
# какому числу из колонки Bm равно числу N , которое соответствует этому времени.
#? тут я что-то не въехал

колонка t из файла 2.txt:

t

310.212500
314.100000
335.362500
349.637500
352.887500
356.137500
359.387500
362.637500
365.912500
369.137500
372.412500
375.662500
378.937500
382.162500
385.412500
388.662500

первое число в этой колонке 310.212500 нужно его вероятно округлить до десятых 310.2, так как в колонке Ttt не найти точно это число.

колонка Ttt из файла text_1.xls:

Ttt
304.350000
305.000000
305.650000
306.300000
306.950000
307.600000
308.250000
308.900000
309.550000
310.200000
310.850000
311.500000
312.150000
312.800000
313.450000
314.120000

Нужно всю колонку чисел тоже округлить до десятых (я так думаю).
Просматриваем колонку Ttt и встречаем близкое число 310.200000. Далее смотрим колонку Bm этого же файла , где находится колонка t файл 2.txt:

Bm

4
0
2
0
0
0
0
0
0
0
0
0
0
0
0
0

берём именно 4, так как это число на одной строчке с 310.212500. Видим, что Bm = 4, т.е. отличное от нуля. В этом файле 2.txt есть другие колонки X_1, …, X_N и Z_1, …, Z_N, где N в данном случае равно 4. Эти поля X_1, …, X_N и Z_1, …, Z_N с полями №, t, Bm, С и под этими полями строчку, вставляем в новый файл.
как выглядит результат:
№ t Bm X_1 X_2 X_3 X_4 Z_1 Z_2
1 314.112500 4 2.750000 2.750000 2.500000 2.250000 -2100.000000 -19050.000000
Z_3 Z_4 C
13856.250000 9581.250000 125252

Далее из колонки t файла 2.txt после числа 310.212500 берём число 314.100000. И выполняем те же самые операции. Поскольку 314.100000 близкое к 314.120000 из колонки Ttt, то смотрим в колонку Bm. 314.100000 на одной строчке с 0, т.е. Bm = 0, то пропускаем вставку в новый файл. И работаем со строчкой, где Bm = 2. Нужно брать новый файл text_2.xls, которая имеет колонку Ttt:

Ttt
333.400000
334.050000
334.700000
335.350000

И всё по новой делать.

Отредактировано whoami217 (Сен. 17, 2017 10:57:39)

Офлайн

#9 Сен. 17, 2017 14:47:29

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

в какие данные ты берешь из файла text_1.xls ? зачем он вообще нужен?
ты зачем-то проверяешь совпадение 2.txt c text_1.xls, а
все данные забираешь из 2.txt.
ИМХО я бы делал так - если анализируемый файл text_N.xls,
то выходной файл - out_N.xls, а так у тебя логическая дыра получается









Офлайн

#10 Сен. 17, 2017 15:20:05

whoami217
Зарегистрирован: 2017-09-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Колонка из чисел, нахождение интервалов, поиск в другом файле и запись в новом файле

vic57

какие данные ты берешь из файла text_1.xls ?
беру данные только из колонки Ttt.
зачем-то проверяешь совпадение 2.txt c text_1.xls
потому что сделали на этом акцент, когда давали задание. хотя особо смысла в этом не вижу. плюс беру 2.txt, потому что не все данные нужны из файла 2.txt.

я бы делал так - если анализируемый файл text_N.xls,
то выходной файл - out_N.xls, а так у тебя логическая дыра получается
может действительно сделать так… только вместо text_N.xls нужно взять 2.txt, так как оттуда берутся данные. да и строки с Bm = 0 не берутся в рассмотрение.

Отредактировано whoami217 (Сен. 17, 2017 16:10:46)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version