title: Unexpected design choice in Python's ConfigParser
body: <p>I tried to read from and write to a config file like so:</p>
  
  <pre><code>with open(file, 'r') as ini:
          config = ConfigParser()
          config.read(ini)
          config['section'] = {'foo':45}
  with open(file, 'w') as ini:
          config.write(ini)
  </code></pre>
  
  <p>I just couldn't get it to read the already saved data. It took me quite a while to find out that I actually have to read from the file like this:</p>
  
  <pre><code>config.read(file)
  </code></pre>
  
  <p>Why is it not consistent? Why do I have to read and write in two different ways? Is there a good reason for this kind of design choice, something about I/O that I don't know yet?</p>
  
  <p>And why did it not raise an exception when I tried to read from a file buffer?</p>
  
  <p>Are there other built-ins that are inconsistent in file handling?</p>