Пропуск переменного количества строк комментариев в стиле C при использовании pandas read_table

#python #pandas

#питон #панды

Вопрос:

Функция pandas read_table() позволяет нам считывать *.tab файл, а параметр skiprow предоставляет гибкие способы извлечения данных. Однако у меня возникают проблемы, когда мне нужно прочитать *.tab файл в цикле, но количество строк, которые нужно пропустить, является случайным. Например, содержимое , которое необходимо пропустить, начинается /* и заканчивается */ , например:

 /* ...  The number of rows need to skip is random ... */  

Итак, как мне найти строку */ и затем использовать параметр skiprow ?

Комментарии:

1. Ошибочно называть их «случайными», потому что это не так, у них просто есть синтаксис, который в настоящее время не обрабатывается анализатором pandas. «Пропустить переменное количество строк комментариев в стиле C» было бы более точным. В любом случае, всякий раз, когда анализатор pandas не может с чем-то справиться, что часто случается, вы закатываете рукава и кодируете базовое исправление Python.

2. Когда вы говорите For example, the contents need to skip start with /* and end with */ , это всего лишь один пример (из многих), и вы хотите написать обобщенный анализатор заголовков на основе регулярных выражений? Или вы хотите анализировать комментарии только в стиле C? В любом случае, мы можем сделать и то, и другое. Кстати, это только подмножество комментариев в стиле C, потому */ что закрытие может происходить в любом месте строки, а не только в отдельной строке в качестве единственных символов.

Ответ №1:

Потребляйте строки до тех пор, пока текущая строка не начнется с '*/' :

 with open('data.txt') as fp:  for row in fp:  if row.startswith('*/'):  df = pd.read_table(fp)  

Комментарии:

1. Полезным дополнением было бы напечатать «ИНФОРМАЦИЯ: Пропущенные {n} строки заголовка комментария в стиле C» .

2. Извините, но я не понимаю, что вы имеете в виду, нужно ли мне добавлять команду в строку с открытым (‘data.txt’) как fp: ? Пожалуйста, будьте осторожнее, спасибо.

3. Юнву, я предлагаю @Corralien добавить код, который подсчитывает строки заголовка, а затем напечатать «ИНФОРМАЦИЯ: Пропущено {n} строк заголовка комментария в стиле C» . Это не сложно.