Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 51

Считывание из файла в список

05.01.2014, 21:13. Показов 3817. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется файл, содержащий повторяющиеся однообразные наборы данных, каждый набор начинается определенной строкой и заканчивается также определенной строкой. Необходимо при чтении файла, встретив строку, совпадающую с шаблоном начала блока данных считать все следующие за ней строки в список, пока не будет встречена строка, совпадающая с шаблоном конца блока данных, когда она встречена необходимо продолжить считывание файла, и когда будет вновь достигнута строка, соответствующая шаблону начала блока данных, считать следующие за ней строки в новый список, пока не будет достигнута строка, соответствующая концу блока данных, потом продолжить искать начало следующего блока данных, ну и так далее. На выходе нужно получить список, состоящий из списков, каждый из которых содержит содержимое одного блока данных. Считать все в один список просто, например я пока написал так:
Python
1
2
3
4
5
6
7
8
9
10
11
def seek_get(fn, spatt, endpatt):
    m, found = [], False
    with open(fn, 'r') as inp:
        for line in inp:
            if found:
                if line.startswith(endpatt):
                    found = False
                m.append(line.split())
            if line.startswith(spatt):
                found = True
    return m
,но нужно именно каждый блок иметь отдельно чтобы можно было отделять один от другого и обрабатывать по отдельности. Подскажите, пожалуйста, как это осуществить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2014, 21:13
Ответы с готовыми решениями:

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

Считывание из бинарного файла и занисение в список
Здравствуйте, уважаемые форумчане. Столкнулся с проблемой считывания из бинарного файла. Только вот не с самим считыванием, а занесением...

Односвязный список: считывание значений из файла
Доброго времени суток! Пожалуйста, подскажите в чем может быть проблема. Есть односвязный список, считываю значения из файла, но значения...

12
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
05.01.2014, 21:46
Пример файла в студию.
0
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 51
05.01.2014, 21:57  [ТС]
Цитата Сообщение от tsar925 Посмотреть сообщение
Пример файла в студию.
Состоит из блоков следующего вида, перемежаемых большими блоками прочей, в данном случае не нужной информации. Блоки интересующих данных (как тот что приведен ниже) отличаются числами (теми, что в экспоненциальной форме), первые три строки и последняя строка одинаковы.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
punched data
 
   2  -1  1000.000  1
  2154.0  0.1628280E-06  2155.0  0.6187712E-08  2156.0  0.9540483E-06
  2157.0  0.4915918E-08  2158.0  0.9282546E-06  2166.0  0.8444210E-10
  2167.0  0.1891511E-11  4099.0  0.6790851E-04  4109.0  0.6846401E-05
  4133.0  0.7064614E-04   234.0  0.6615009E-07  2235.0  0.2192427E-03
   236.0  0.1380714E-03  8238.0  0.2143558E-01  6239.0  0.2188810E-03
  1240.0  0.7602251E-04  1241.0  0.6070558E-04  1242.0  0.2139236E-04
  6016    0.4707794E-01   160    0.1391664E-10   161    0.1445915E-07
   162    0.1235275E-07   163    0.1229100E-07   164    0.5099552E-08
   165    0.5708093E-08  4083    0.4298523E-05  4095    0.6815422E-04
  4101    0.6885691E-04  5103    0.3962094E-05  4106    0.1567435E-04
  4103    0.3490518E-04  4105    0.1045114E-06  5105    0.3633413E-04
  4107    0.2086732E-04  4108    0.1407747E-04  4113    0.1036983E-07
  4115    0.8847069E-07  4125    0.5887514E-06  5127    0.5478394E-07
  4127    0.3020496E-05  4131    0.2493479E-04  4134    0.1307430E-04
  4137    0.8335095E-04  6135    0.3101875E-07  5134    0.1029214E-03
  4135    0.1382079E-07  5135    0.2887151E-04  4136    0.1509021E-03
  4143    0.4936722E-04  4145    0.3983767E-04  4147    0.3570954E-05
  5147    0.4026912E-05  6147    0.2999094E-05  4148    0.1268861E-06
  5148    0.8197362E-07  6148    0.1153364E-04  5149    0.7386448E-07
  4149    0.1679984E-06  4150    0.1736628E-04  4151    0.1057507E-05
  4152    0.6257583E-05  5151    0.1131610E-08  5152    0.1443238E-08
  4153    0.7227696E-05  4154    0.2043176E-05  4155    0.5691565E-06
  4902    0.1281808E-02  4927    0.8430779E-13   927    0.4942069E-06
   937    0.2154196E-04  1939    0.3362798E-05   948    0.1125664E-04
   951    0.1730250E-05  1952    0.3736257E-08   952    0.3485359E-07
   953    0.6376359E-05   962    0.6236894E-06   963    0.2094453E-07
   964    0.3471057E-05
000:00:00      cpu time =     0.000 secs
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
05.01.2014, 22:13
Что из этого всего нужно, а что нет?
0
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 51
05.01.2014, 22:16  [ТС]
Цитата Сообщение от tsar925 Посмотреть сообщение
Что из этого всего нужно, а что нет?
Как было сказано в предыдущем посте, это — пример куска, который нужен. Достигнув строки "punched data" надо считывать строки в список, пока не будет достигнута последняя строка, которая начинается с "000:00...", затем читать файл далее пока снова не попадется следующая "punched data", и так далее. При этом важно хранить информацию, полученную для каждого блока в отдельном списке. Мой вопрос в том, как сделать это. Как считать все подряд в один список я понимаю и приводил в стартовом посте.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
05.01.2014, 22:53
Нужные данные всегда начинаются с punched data?
0
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 51
05.01.2014, 22:56  [ТС]
Цитата Сообщение от tsar925 Посмотреть сообщение
Нужные данные всегда начинаются с punched data?
Да, как и было написано ранее...
Но на это особо не отвлекайтесь, повторюсь, вопрос в том что я пока что не могу придумать, как каждый блок считывать в отдельный список, а не все подряд.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
05.01.2014, 23:30
Наверняка можно намного более изящно решить, но я только учусь, так что вот мой быкокод.
Python
1
2
3
4
5
6
7
8
9
10
11
input_file = open('12.txt').readlines()
result = []
temp = []
for i in input_file:
    if not 'punched data' in i and i != '\n' and not '000:00:00' in i:
        temp.append(i)
    if '000:00:00' in i:
        result.append(temp)
        temp = []
        
print(result)
0
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 51
06.01.2014, 00:34  [ТС]
Цитата Сообщение от tsar925 Посмотреть сообщение
Наверняка можно намного более изящно решить, но я только учусь, так что вот мой быкокод.
Python
1
2
3
4
5
6
7
8
9
10
11
input_file = open('12.txt').readlines()
result = []
temp = []
for i in input_file:
    if not 'punched data' in i and i != '\n' and not '000:00:00' in i:
        temp.append(i)
    if '000:00:00' in i:
        result.append(temp)
        temp = []
        
print(result)
Спасибо, сделал не совсем так но саму идею допер. Жутко просто, сам не знаю чего так тупил.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
06.01.2014, 00:46
Да пожалуйста, всегда рад помочь. Если не жалко выложите свой вариант, хочется посмотреть.
0
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 51
06.01.2014, 01:04  [ТС]
Цитата Сообщение от tsar925 Посмотреть сообщение
Да пожалуйста, всегда рад помочь. Если не жалко выложите свой вариант, хочется посмотреть.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def seek_get(fn, startpatt, endpatt):
    res, temp, found = [], [], False
    with open(fn, 'r') as inp:
        for line in inp:
            if line.startswith(startpatt):
                found = True 
            if found:
                temp.append(line.split())
                if line.startswith(endpatt):
                    found = False
                    res.append(temp)
                    temp = []
    return res
0
45 / 39 / 24
Регистрация: 29.11.2013
Сообщений: 145
06.01.2014, 01:57
Мой вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# -*- coding: utf-8 -*-
 
import re
 
rez, c = [], 0
 
input_file = open('pd.txt').read()
 
f = re.findall('(?is)(?:punched data)\s{1,}(.*?)\s?(?:\d{3}\:\d{2}\:\d{2})', input_file)
 
while c < len(f):
    rez.append(f[c].split())
    c += 1
 
print(len(rez))
print(rez[c])
0
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 51
06.01.2014, 17:15  [ТС]
Цитата Сообщение от ivsatel Посмотреть сообщение
Мой вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# -*- coding: utf-8 -*-
 
import re
 
rez, c = [], 0
 
input_file = open('pd.txt').read()
 
f = re.findall('(?is)(?:punched data)\s{1,}(.*?)\s?(?:\d{3}\:\d{2}\:\d{2})', input_file)
 
while c < len(f):
    rez.append(f[c].split())
    c += 1
 
print(len(rez))
print(rez[c])
Вот через регэкспы походу реально круто, можно всю эту хрень в одну строку написать, только я в них пока не разбираюсь, надо освоить обязательно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.01.2014, 17:15
Помогаю со студенческими работами здесь

Ошибка при считывание из файла в список
Доброго времени суток! Возникла такая проблема: писал программу для адресной книги, которая работает через динамическую структуру...

Считывание строк из файла в односвязный список
Собственно, суть задачи в этом и состоит: считать все строки из файла в список и вывести на экран. Вот код: #include...

Считывание из файла в односвязный список и действия с ним
Дана задача: из файла считываются данные в односвязный список. Список должен быть динамическим и каждый член которого должен быть...

Реализовать считывание текста из файла и его хэширование, а не программное считывание
Как реализовать считывание текста из файла и его хэширование, а не программное считывание namespace md5 { class Program ...

Заменить считывание данных из файла на считывание с TextBox
Добрый день! Прошу помочь пожалуйста новичку в C#. Есть код нужно его преобразовать немного, чтобы шифруемые данные брались не из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru