это похоже на глупую проблему, но здесь идет речь.
У меня много файлов данных для обработки, каждый файл имеет переменное количество строк преамбулы перед основными данными.Обработка требует, чтобы я нашел некоторые значения в преамбуле и затем прочитал основные данные в pandas df.
Из преамбулы мне нужно количество строк, которые я могу сделать:
with open(csvfile) as f:
data = f.readlines()
for num, line in enumerate(data, 0):
if end_preamble in line:
lines = num
Мне также нужно найти некоторые значения в преамбуле, которые необходимы для обработки последующих данных.Я также могу сделать это:
with open(csvfile) as f:
data = f.read()
term1 = re.finall...(regex term)..
обе эти работы, но read()
не возвращает номера строк, поскольку (как я понимаю) он интерпретирует текст как одну строку.И наоборот, readlines()
нельзя переопределить для строки (я думаю, потому что она не сохраняется - но я вполне могу ошибаться).
На данный момент у меня есть хак:
with open(csvfile) as f:
data = f.read(250)
lines = data.count('\n')
term1 = re.finall.....
Это работает, поскольку большую часть времени преамбула имеет длину менее 250 байт.Но если у меня есть файл с очень короткой или очень длинной преамбулой, это не сработает.
Файлы не очень большие, поэтому я могу использовать readlines()
, а также read()
, но читая файл дваждыкажется неэффективным способом выполнить то, что кажется относительно тривиальной задачей.Есть ли более эффективный метод сочетания двух потребностей?