code: def _read(filepath_or_buffer: FilePathOrBuffer, kwds):
      
      encoding = kwds.get('encoding', None)
      if encoding is not None:
          encoding = re.sub('_', '-', encoding).lower()
          kwds['encoding'] = encoding
  
      compression = kwds.get('compression', 'infer')
      compression = _infer_compression(filepath_or_buffer, compression)
  
      # TODO: get_filepath_or_buffer could return
      # Union[FilePathOrBuffer, s3fs.S3File, gcsfs.GCSFile]
      # though mypy handling of conditional imports is difficult.
      # See https://github.com/python/mypy/issues/1297
      fp_or_buf, _, compression, should_close = get_filepath_or_buffer(
          filepath_or_buffer, encoding, compression)
      kwds['compression'] = compression
  
      if kwds.get('date_parser', None) is not None:
          if isinstance(kwds['parse_dates'], bool):
              kwds['parse_dates'] = True
  
      # Extract some of the arguments (pass chunksize on).
      iterator = kwds.get('iterator', False)
      chunksize = _validate_integer('chunksize', kwds.get('chunksize', None), 1)
      nrows = kwds.get('nrows', None)
  
      # Check for duplicates in names.
      _validate_names(kwds.get("names", None))
  
      # Create the parser.
      parser = TextFileReader(fp_or_buf, **kwds)
  
      if chunksize or iterator:
          return parser
  
      try:
          data = parser.read(nrows)
      finally:
          parser.close()
  
      if should_close:
          try:
              fp_or_buf.close()
          except ValueError:
              pass
  
      return data
docs: Generic reader of line files.