Я использую numpy.fromfile
построить массив, который я могу передать в pandas.DataFrame
конструкторNumPy: FromFile для сжатых файлов
import numpy as np
import pandas as pd
def read_best_file(file, **kwargs):
'''
Loads best price data into a dataframe
'''
names = [ 'time', 'bid_size', 'bid_price', 'ask_size', 'ask_price' ]
formats = [ 'u8', 'i4', 'f8', 'i4', 'f8' ]
offsets = [ 0, 8, 12, 20, 24 ]
dt = np.dtype({
'names': names,
'formats': formats,
'offsets': offsets
})
return pd.DataFrame(np.fromfile(file, dt))
Я хотел бы продлить этот метод для работы с файлами с gzip'нутыми.
Согласно документации numpy.fromfile, первый параметр файла:
file : file or str Open file object or filename
Таким образом, я добавил следующее, чтобы проверить на GZIP путь к файлу:
if isinstance(file, str) and file.endswith(".gz"):
file = gzip.open(file, "r")
Однако, когда я пытаюсь передайте это через конструктор fromfile
. Я получаю IOError
:
IOError: first argument must be an open file
Вопрос:
Как я могу позвонить numpy.fromfile
с сжатыми файлами?
Edit:
По запросу в комментариях, показывая выполнение которых проверяет наличие файлов с gzip'нутыми:
def read_best_file(file, **kwargs):
'''
Loads best price data into a dataframe
'''
names = [ 'time', 'bid_size', 'bid_price', 'ask_size', 'ask_price' ]
formats = [ 'u8', 'i4', 'f8', 'i4', 'f8' ]
offsets = [ 0, 8, 12, 20, 24 ]
dt = np.dtype({
'names': names,
'formats': formats,
'offsets': offsets
})
if isinstance(file, str) and file.endswith(".gz"):
file = gzip.open(file, "r")
return pd.DataFrame(np.fromfile(file, dt))
Мы должны были бы увидеть, как именно осуществляется проверка. – TheBlackCat
@TheBlackCat Буквально перед оператором возврата эти две строки вставлены. –
Можете ли вы показать полный код с правильным отступом? – TheBlackCat