2016-12-19 1 views
0

Ответов на вопросы типа «Как это сделать„ а не ВФ (файл)“»Python 3 просматривает файл до EOF. Файл не просто набор подобных линий, требующая обработке

не совсем подходит моему вопросу

У меня есть файл с форматом, как

блок заголовка

данных

другой блок заголовка

больше данных (с произвольным числом строк данных в каждом блоке данных)

...

Я не знаю, сколько заголовков наборов данных есть

Я успешно прочитал первый блок, затем набор данных с использованием циклов, которые ищут пустую строку в конце блока данных.

Я не могу просто использовать подход типа «для каждой строки в openfile», поскольку мне нужно читать блоки данных заголовка по одному, а затем обрабатывать их.

Как я могу определить последний блок данных заголовка.

Мой нынешний подход - использовать попытку, кроме строительства, и ждать исключения. Не очень элегантно.

ответ

1

Трудно ответить, не видя ни одного из кода ...

Но я думаю, что вы читаете файл с fp.read():

fp = open("a.txt") 
while True: 
    data = fp.read() 

Вместо:

  1. попробовать для передачи всегда длины данных, которые вы использовали.
  2. Проверьте, является ли прочитанный chunck пустой строкой, а не ни одной

Например:

fp = open("a.txt") 
while True: 
    header = fp.read(headerSize) 
    if header is '': 
     # End of file 
     break 
    read_dataSize_from_header 
    data = fp.read(dataSize) 
    if data is '': 
     # Error reading file 
     raise FileError('Error reading file') 
    process_your_data(data) 
+0

В конце концов, я сделал загрузку регулярных выражений изменений, и это было легко удалить пустые строки сезам ВФ и определить начало блока. – nerak99

Смежные вопросы