Я пытаюсь добавить индикатор выполнения при чтении большого файла (около 4 ГБ). Пока у меня это:
class PercentageFile:
def __init__(self, filename):
self.size = os.stat(filename)[6]
self.f = open(filename,"r")
self.i = self.f.tell()
def __enter__(self):
return self
def readline(self):
data = self.f.readline()
self.i = self.f.tell()
return data
def __iter__(self):
return self
def __next__(self):
data = self.f.readline()
if self.i == self.f.tell():
raise StopIteration
self.i = self.f.tell()
return data
def read(self, size=None):
if size is None:
self.i = self.size
return self.f.read()
data = self.f.read(size)
self.i = self.f.tell()
return data
@property
def percentage(self):
return float(self.i) / self.size * 100.0
def __exit__(self, exc_type, exc_value, traceback):
self.f.close()
Дело в том, что это намного медленнее, чем просто чтение файла без индикатора выполнения. Я хотел бы знать, есть ли способ, который не сильно влияет на производительность.
В моей системе выполнение for
в файле размером 5 КБ занимает 0,00013 секунды, если он создан с использованием open
, тогда как с использованием моего класса это занимает 0,02038 секунды.