|
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
|
||||||
Как за один проход сравнить поля у групп строк, сохраняя подходящие группы?15.11.2013, 17:29. Показов 2168. Ответов 20
Метки нет (Все метки)
Имеется файл содержащий строки вида
Проблема в том, что строк в файле может быть сильно больше 300.000, поэтому возникает вопрос как сделать подобный отбор эффективно.
0
|
||||||
| 15.11.2013, 17:29 | |
|
Ответы с готовыми решениями:
20
Как не сохраняя на диске открыть файл из Blob-поля (mssql) Как считывать только одно число типа double за один проход |
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 15.11.2013, 20:48 | ||
|
в любом случае нужно набрать всю группу куда-то, потому что только на последней строке станет ясно, нужно ли группу сохранять
файловый объект, открытый в текстовом режиме, уже разделён на строки и является итератором по ним, поэтому возвраты по файлу будут невозможны от этого зависит, сколько она займёт памяти при временном сохранении крайний случай - весь файл является одной группой; в таком случае лучше по файлу делать возвраты, а для этого нужно будет вручную разделять файл на строки - это долго в плане написания (нужно будет делать свой итератор)
0
|
||
|
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
|
||
| 15.11.2013, 21:31 [ТС] | ||
0
|
||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
| 15.11.2013, 21:49 | |
|
давай конкретный пример входного файла и файла результата
0
|
|
|
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
|
|||||||||||
| 15.11.2013, 22:16 [ТС] | |||||||||||
|
На входе
На выходе (нужное нам id - gene_id, отсеивание по количеству строк > 5 и по значению frac > 0.31)
0
|
|||||||||||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||
| 15.11.2013, 23:40 | |||||||||||
|
прежняя версия (неправильная)
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
|
|
| 16.11.2013, 00:12 [ТС] | |
|
Судя по тестовому файлу все работает замечательно.
Большое спасибо!
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
| 16.11.2013, 05:30 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
|
|
| 16.11.2013, 12:13 [ТС] | |
|
Рано радовался?
![]() Вообще странно, последняя версия кода вроде тестовый скушала и выдала то что нужно... А в чем косяк?
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||||||||
| 17.11.2013, 08:46 | |||||||||||||||||
|
обновил там версию Добавлено через 2 минуты я, короче, после того как сделал, чтобы тесты проходили, переписал всё сначала на генератор, чтобы можно было подать поток строк и получить поток строк, а потом переписал всё на itertools, получилось короче, а по скорости - то же самое Добавлено через 1 час 34 минуты это через генератор
это через генератор и itertools
по скорости они равны Добавлено через 8 часов 16 минут
2 - индукция с генератором 3 - itertools с файлами 4 - itertools с генератором Добавлено через 1 минуту проверки n и v поменял местами, чтобы не искать в строках фракцию, если их количество уже не подходит
1
|
|||||||||||||||||
|
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
|
||||||
| 25.11.2013, 03:36 [ТС] | ||||||
|
Не знаю, создавать ли отдельную тему, т.к. следующий вопрос связан с этим...
В полученных после обработки файлах нужно найти одинаковые группы строк все по тем же gene_id, и если есть совпадение скопировать эти группы в отдельные файлы. Если мы сравниваем два файла, то тут можно взять и просто читать из первого все gene_id подряд и искать совпадение во втором, если есть = копируем строки с совпадением из второго файла в новый. Но тут начинаются проблемы - группы с одинаковыми gene_id могут иметь разное количество строк в разных файлах. Что вроде бы решается, если считывая следующий gene_id из первого файла мы сравниваем его с предыдущим и исключаем повторы. Но если нам нужно сравнить 3-4 файла разом? Считать их можно попросту из той же директории где лежит наша программа...
0
|
||||||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 25.11.2013, 20:20 | ||
|
у одинаковых групп может быть разное количество строк ?
0
|
||
|
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
|
|
| 25.11.2013, 21:00 [ТС] | |
|
Да, все именно так. Именно поэтому их и понадобилось копировать отдельно для каждого файла.
(соответственно если хоть в одном файле такого gene_id нет, то эту группу мы не копируем)
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
| 25.11.2013, 21:24 | |
|
что мешает просто склеить все файлы в один и разделить все разные группы в нём по разным файлам?
0
|
|
|
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
|
|
| 25.11.2013, 21:33 [ТС] | |
|
т.е. собираем все файлы в один, затем проверяем, чтобы каждая группа одинаковых gene_id повторялся столько раз - сколько было склеено файлов, затем удаляем не удовлетворяющие этому условию и разделяем файлы назад?
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
| 25.11.2013, 21:49 | |
|
не,
1. все файлы склеиваются в один поток строк 2. для каждой строки: 2.1. выделяется поле 2.2. по полю составляется имя файла 2.3. если файла нет, он создаётся 2.4. строка пишется в файл
0
|
|
|
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
|
|
| 25.11.2013, 21:54 [ТС] | |
|
Ох, а такую штуку я просто не знаю как написать.
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
| 25.11.2013, 22:51 | ||||||
1
|
||||||
|
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 13
|
|
| 25.11.2013, 23:57 [ТС] | |
|
И на выходе мы получаем по файлу для каждого соответствия, что очень удобно, когда нужно глазами посмотреть места где произошли совпадения и сравнить их... и все благодаря моей идиотской формулировке...
имелось в виду, что для каждого input файла создается один файл в котором из него остаются только те группы которые имеют gene_id, который встречаются во всех других input файлах...
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 26.11.2013, 00:16 | ||
|
1. составить множество общих полей для всех файлов 1.1. для каждого файла: 1.1.1. составить множество полей файла 1.2. найти пересечение всех множеств 2. для каждого файла: 2.1. получить имя выходного файла на основе имени файла 2.2. записать строки с полями, входящими во множество общих полей, в выходной файл
0
|
||
| 26.11.2013, 00:16 | |
|
Помогаю со студенческими работами здесь
20
Поведение групп jsp страниц как некой единой функциональной группы В динамическом списке номенклатуры при открытии группы видеть товары этой группы и товары всех вложенных групп Как загрузить данные из базы данных сохраняя переносы строк? Как за один проход по массиву найти 2 наименьших элемента и их индексы без того чтобы сортировать массив?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|