Вы можете пропустить все строки до первой строки данных, а затем проанализировать данные в списке для дальнейшего использования - более 700 строк могут быть легко обработаны в памяти.
Для этого вам необходимо:
- прочитать файл построчно
- запомнить последнюю непустую строку перед числом / запятой / точкой (== заголовок)
- проверьте, является ли строка только цифрой / запятой / точкой, иначе увеличьте счетчик пропусков (== данные)
- ищите 0
- пропустить достаточно строк, чтобы добраться до заголовка или данных
- прочитать остальные в структуру данных
Создать тестовый файл:
text = """
""
"Test Methdo","exp-l Tensile with Extensometer.msm"
"Sample I.D.","Sample108.mss"
"Speciment Number","1"
"Load (lbf)","Time (s)","Crosshead (in)","Extensometer (in)"
62.638,0.900,0.000,0.00008
122.998,1.700,0.001,0.00012
"""
with open ("t.txt","w") as w:
w.write(text)
Некоторые помощники илогика пропуска / чтения:
import re
import csv
def convert_row(row):
"""Convert one row of data into a list of mixed ints and others.
Int is the preferred data type, else string is used - no other tried."""
d = []
for v in row:
try:
# convert to int && add
d.append(float(v))
except:
# not an int, append as is
d.append(v)
return d
def count_to_first_data(fh):
"""Count lines in fh not consisting of numbers, dots and commas.
Sideeffect: will reset position in fh to 0."""
skiplines = 0
header_line = 0
fh.seek(0)
for line in fh:
if re.match(r"^[\d.,]+$",line):
fh.seek(0)
return skiplines, header_line
else:
if line.strip():
header_line = skiplines
skiplines += 1
raise ValueError("File does not contain pure number rows!")
Использование помощников / преобразование данных:
data = []
skiplines = 0
with open("t.txt","r") as csvfile:
skip_to_data, skip_to_header = count_to_first_data(csvfile)
for _ in range(skip_to_header): # skip_to_data if you do not want the headers
next(csvfile)
reader = csv.reader(csvfile, delimiter=',',quotechar='"')
for row in reader:
row_data = convert_row(row)
if row_data:
data.append(row_data)
print(data)
Вывод (переформатированный):
[['Load (lbf)', 'Time (s)', 'Crosshead (in)', 'Extensometer (in)'],
[62.638, 0.9, 0.0, 8e-05],
[122.998, 1.7, 0.001, 0.00012]]
Доку:
Теперь у вас есть «чистые» данные, которые вы можете использовать для дальнейшей обработки, включая ваши заголовки.
Для визуализации вы можете взглянуть на matplotlib