class_docstr: Base class for CSV file based :class:`pyalgotrade.barfeed.BarFeed`.
  
  .. note::
      This is a base class and should not be used directly.
class_docstr_tok: ["Base","class","for","CSV","file","based",":","class",":","`","pyalgotrade.barfeed.BarFeed","`",".","..","note",":",":","This","is","a","base","class","and","should","not","be","used","directly","."]
code: def addBarsFromCSV(
      self, instrument, path, rowParser, skipMalformedBars=False
  ):
      def parse_bar_skip_malformed(row):
          ret = None
          try:
              ret = rowParser.parseBar(row)
          except Exception:
              pass
          return ret
  
      if skipMalformedBars:
          parse_bar = parse_bar_skip_malformed
      else:
          parse_bar = rowParser.parseBar
  
      # Load the csv file
      loadedBars = []
      reader = csvutils.FastDictReader(
          open(path, "r"),
          fieldnames=rowParser.getFieldNames(),
          delimiter=rowParser.getDelimiter(),
      )
      for row in reader:
          bar_ = parse_bar(row)
          if bar_ is not None and (
              self.__barFilter is None
              or self.__barFilter.includeBar(bar_)
          ):
              loadedBars.append(bar_)
  
      self.addBarsFromSequence(instrument, loadedBars)
  
imports: import datetime
  import pytz
  import six
  from pyalgotrade.utils import dt
  from pyalgotrade.utils import csvutils
  from pyalgotrade.barfeed import membf
  from pyalgotrade import bar
label_desc: Use image node_id 6 for calling the BarFeed obj's underlying member method code with example usage: obj.addBarsFromCSV(instrument, path, rowParser, skipMalformedBars) and returns: ret