title: TypeError: a bytes-like object is required, not 'str' with serverless and Python3
body: <p>I have an aws-lambda function that is triggered whenever a CSV file is uploaded to s3 bucket. I am using serverless framework with Python 3.6, the issue is that i am getting this error message </p>
  
  <blockquote>
    <p>a bytes-like object is required, not 'str': TypeError</p>
    
    <p>Traceback (most recent call last): </p>
    
    <p>File "/var/task/handler.py", line 33, in csvfile</p>
    
    <p>fichier = obj['Body'].read().split('\n')</p>
    
    <p>TypeError: a bytes-like object is required, not 'str'</p>
  </blockquote>
  
  <p>I have did some research in the net <a href="https://stackoverflow.com/questions/34283178/typeerror-a-bytes-like-object-is-required-not-str-in-python-and-csv">here</a>, the issue, is i am not using the open method cause the file is read by s3 event so don't know how to fix it</p>
  
  <p>Here is my code :</p>
  
  <pre><code>import logging
  import boto3
  from nvd3 import pieChart
  import sys
  import csv
  
  
  xdata = []
  ydata = []
  xdata1 = []
  ydata1 = []
  
  
  logger = logging.getLogger()
  logger.setLevel(logging.INFO)
  
  def csvfile(event, context):
  
      s3 = boto3.client('s3')    
      # retrieve bucket name and file_key from the S3 event
      bucket_name = event['Records'][0]['s3']['bucket']['name']
      file_key = event['Records'][0]['s3']['object']['key']
      logger.info('Reading {} from {}'.format(file_key, bucket_name))
      # get the object
      obj = s3.get_object(Bucket=bucket_name, Key=file_key)
      # get lines inside the csv
      fichier = obj['Body'].read().split('\n')
      #print lines
       for ligne in fichier:
          if len(ligne) &gt; 1:
              logger.info(ligne.decode())
              liste = ligne.split(',')
              print(liste)
              if liste[2] == 'ByCateg':
                  xdata.append(liste[4]) 
                  ydata.append(liste[1]) 
              elif liste[2] == 'ByTypes':
                  xdata1.append(liste[4]) 
                  ydata1.append(liste[1]) 
  
           print ' '.join(xdata) 
  
  print('Function execution Completed')
  </code></pre>
  
  <p>and here is my serverless.yml code:</p>
  
  <pre><code>service: aws-python # NOTE: update this with your service name
  
  provider:
    name: aws
    runtime: python3.6
    stage: dev
    region: us-east-1
    iamRoleStatements:
          - Effect: "Allow"
            Action:
                - s3:*
                - "ses:SendEmail"
                - "ses:SendRawEmail"
                - "s3:PutBucketNotification"
            Resource: "*"
  
      functions:
    csvfile:
      handler: handler.csvfile
      description: send mail whenever a csv file is uploaded on S3 
      events:
        - s3:
            bucket: car2
            event: s3:ObjectCreated:*
            rules:
              - suffix: .csv
  </code></pre>