Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 7, 2018 13:11:39

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

Найти в файлах наибольший показатель и вывести значение файлов в консоль

Всем привет, прошу помочь (и научить на конкретном примере, дать толчок в решениях на сверку данных) которые в моей практике будут в дальнейшем скорее всего часто использоваться.
————–
Имеются файлы, в каждом сразу после времени, после запятой находится значение, которое нужно сравнить с остальными во всех файлах.
Определив максимальное значение среди всех файлов - вывести имя файла в консоль.

Прикреплённый файлы:
attachment Выгрузки.rar (481,3 KБ)

Офлайн

#2 Дек. 8, 2018 06:01:44

asgrom
Зарегистрирован: 2018-08-10
Сообщения: 8
Репутация: +  1  -
Профиль   Отправить e-mail  

Найти в файлах наибольший показатель и вывести значение файлов в консоль

 import os
import sys
def find_max_value(fname):
    value = 0
    with open(fname, encoding='cp866') as fn:
        try:
            for i in fn:
                v = int(i.split()[0].split(',')[1])
                if v > value:
                    value = v
        except IndexError:
            pass
    return {value: fname}
def main():
    dirname = os.path.abspath(sys.argv[1])
    os.chdir(dirname)
    res = {}
    for i in os.listdir(dirname):
        res.update(find_max_value(i))
    print(res.get(max(res)))
if __name__ == "__main__":
    main()

Офлайн

#3 Дек. 8, 2018 10:53:51

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

Найти в файлах наибольший показатель и вывести значение файлов в консоль

Antonpython
дать толчок в решениях на сверку данных) которые в моей практике будут в дальнейшем
Тут надо открывать файл и пропускать его строки через фильтр с регулярным выражением, которое возвращает искомую подстроку. А потом уже для файла список всех подстрок брать и приводить каждую из них к целому числу. Дальше передаётся этот список чисел на функцию поиска максимума. И когда у тебя есть список пар (имя_файла, максимум_файла), эти пары уже анализируются на максимум среди максимумов.

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

Вот чтобы не писать каждый раз новую программу с нуля (и десяток похожих программ в итоге), пишется одна программа с узлами общего вида, которые можно легко перенастроить или просто легко переписать.



Отредактировано py.user.next (Дек. 8, 2018 10:55:35)

Офлайн

#4 Дек. 8, 2018 13:43:32

asgrom
Зарегистрирован: 2018-08-10
Сообщения: 8
Репутация: +  1  -
Профиль   Отправить e-mail  

Найти в файлах наибольший показатель и вывести значение файлов в консоль

С моего нубского взгляда можно сделать так:

 def parser(fname):
    reader = csv.reader(fname, delimiter='|')
    for i in reader:
        value = re.findall(
            r'^[^,]+,([\d]+)', i[0]
        )[0]
    ...
Передавать сюда открытый файлик, а потом с результатом что-нить делать.
delimiter тоже можно вынести в константу и потом менять или передавать функции как параметр и т.д. и разрастется скрипт…
По-моему легче быстро накидать новый чем предусматривать все условия, которые могут возникнуть.
Но это по моему нубскому мнению.

Отредактировано asgrom (Дек. 8, 2018 13:44:44)

Офлайн

#5 Дек. 9, 2018 02:13:10

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

Найти в файлах наибольший показатель и вывести значение файлов в консоль

asgrom
По-моему легче быстро накидать новый чем предусматривать все условия, которые могут возникнуть.
Ты просто не видишь, как оно поменяется. Вот ты говоришь “подать файлик”, а завтра у него придёт поток тех же самых строк на сайт. То есть он может через requests взять эти строки, а дальше что? А дальше ему нужно будет сохранять их в файл, потому что ты наложил такое условие - что строки берутся из файла. Лишнее действие? Ну ладно, пофиг на лишнее действие. А теперь представь бесконечный поток строк, который всё идёт и идёт. Мы не можем в любой момент остановиться и посчитать, потому что у тебя она должна в файл всё сначала сохранить.

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

Поэтому мы во всех таких местах, где может что-то поменяться, вставляем отведение на сложные разборщики.

Вот у меня недавно такое было в реальной программе, которую я написал давно уже. У меня программа разбирала файл. Файл не мой, я его не делаю, это чужой файл из чужой программы. Всё было прекрасно несколько месяцев. А потом они взяли и сжали его для удобства. И что, ты думаешь, моя программа? Сломалась, конечно. Работа остановилась. Пришлось писать расжатие. А расжимать файл в него же нельзя, потому что это не мой файл, им другая программа тоже пользуется. Вот пришлось разжимать его вообще в сторону, а потом этот сторонний расжатый файл брать. При этом в старых версиях программы (которая файл производит) файл не сжат и его тоже нужно уметь брать без разжатия, как раньше было. То есть я не могу поменять код на другой. Мне нужно старый оставить и новый дописать к нему и их оба использовать потом, переключаясь между ними.

А ты говоришь, каждый раз новую программку писать. Она может маленькой быть, а может огромненькой быть. И на ней может быть построена работа какая-то важная.



Отредактировано py.user.next (Дек. 9, 2018 02:23:37)

Офлайн

#6 Дек. 9, 2018 04:21:00

asgrom
Зарегистрирован: 2018-08-10
Сообщения: 8
Репутация: +  1  -
Профиль   Отправить e-mail  

Найти в файлах наибольший показатель и вывести значение файлов в консоль

Я написал про данный случай.

А так я с тобой полностью согласен.

Офлайн

#7 Дек. 17, 2018 10:15:43

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

Найти в файлах наибольший показатель и вывести значение файлов в консоль

Спасибо, конечно)

Подскажите, пожалуйста, а как просто вывести список уникальных сочетаний файлов {значение и название} отсортированных по возрастанию значения в виде:

996 OBC.TskMdt3.prot.20181207_101506.txt
997 OBC.TskMdt2.prot.20181207_101903.txt
999 OBC.TskMdt2.prot.20181207_094916.txt
999 OBC.TskMdt3.prot.20181207_100517.txt

?

Офлайн

#8 Дек. 17, 2018 18:40:20

asgrom
Зарегистрирован: 2018-08-10
Сообщения: 8
Репутация: +  1  -
Профиль   Отправить e-mail  

Найти в файлах наибольший показатель и вывести значение файлов в консоль

Antonpython
Подскажите, пожалуйста, а как просто вывести список уникальных сочетаний файлов {значение и название} отсортированных по возрастанию значения в виде:
996 OBC.TskMdt3.prot.20181207_101506.txt
997 OBC.TskMdt2.prot.20181207_101903.txt
999 OBC.TskMdt2.prot.20181207_094916.txt
999 OBC.TskMdt3.prot.20181207_100517.txt?

 print(sorted(чего-то там))

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version