@property
    def fieldnames(self):
        if self._fieldnames is not None:
            return self._fieldnames

        # Create a new reader just to figure out which row is the header
        args, kwds = self._readeropts
        data = csv.reader(*args, **kwds)
        rows = []
        for i in range(self.max_header_row):
            try:
                rows.append(next(data))
            except StopIteration:
                pass
        header_row, field_names = self.choose_header(rows)

        # Reset file and advance reader so it starts in the right spot
        self._file.seek(0)
        for i in range(header_row + 1):
            try:
                next(self.reader)
            except __HOLE__:
                pass

        self._fieldnames = field_names
        self._header_row = header_row
        return field_names
dataset/ETHPy150Open wq/wq.io/parsers/readers.py/SkipPreludeReader.fieldnames