title: Python3 write gzip file - memoryview: a bytes-like object is required, not 'str'
body: <p>I want to write a file. Based on the name of the file this may or may not be compressed with the <code>gzip</code> module. Here is my code:</p>
  
  <pre><code>import gzip
  filename = 'output.gz'
  opener = gzip.open if filename.endswith('.gz') else open
  with opener(filename, 'wb') as fd:
      print('blah blah blah'.encode(), file=fd)
  </code></pre>
  
  <p>I'm opening the writable file in binary mode and encoding my string to be written. However I get the following error:</p>
  
  <pre><code>File "/usr/lib/python3.5/gzip.py", line 258, in write
    data = memoryview(data)
  TypeError: memoryview: a bytes-like object is required, not 'str'
  </code></pre>
  
  <p>Why is my object not a bytes? I get the same error if I open the file with <code>'w'</code> and skip the encoding step. I also get the same error if I remove the <code>'.gz'</code> from the filename.</p>
  
  <p>I'm using Python3.5 on Ubuntu 16.04</p>