title: Using argparse to create output file
body: <p>I have been using argparse in a program I am writing however it doesnt seem to create the stated output file. </p>
  
  <p>My code is:</p>
  
  <pre><code>parser.add_argument("-o", "--output", action='store', dest='output', help="Directs the output to a name of your choice")
  with open(output, 'w') as output_file:
              output_file.write("%s\n" % item)
  </code></pre>
  
  <p>I have also tried:</p>
  
  <pre><code>parser.add_argument("-o", "--output", action='store', type=argparse.FileType('w'), dest='output', help="Directs the output to a name of your choice")
      output_file.write("%s\n" % item)
  </code></pre>
  
  <p>The error that occurs is :</p>
  
  <pre><code>    output_file.write("%s\n" % item)
  NameError: name 'output_file' is not defined
  </code></pre>
  
  <p>Can someone please explain why I am having this error occuring and how I could solve it?</p>
  
  <p>All my code:</p>
  
  <pre><code>from __future__ import print_function
  from collections import defaultdict
  from itertools import groupby
  import argparse #imports the argparse module so it can be used
  from itertools import izip
  #print = print_function
  
  
  
  
  parser = argparse.ArgumentParser() #simplifys the wording of using argparse as stated in the python tutorial
  parser.add_argument("-r1", type=str, action='store',  dest='input1', help="input the forward read file") # allows input of the forward read
  parser.add_argument("-r2", type=str, action='store', dest='input2', help="input the reverse read file") # allows input of the reverse read
  parser.add_argument("-v", "--verbose", action="store_true", help=" Increases the output, only needs to be used to provide feedback to Tom for debugging")
  parser.add_argument("-n", action="count", default=0, help="Allows for up to 5 mismatches, however this will reduce accuracy of matching and cause mismatches. Default is 0")
  #parser.add_argument("-o", "--output", action='store', type=argparse.FileType('w'), dest='output', help="Directs the output to a name of your choice")
  parser.add_argument("-fastq", action="store_true", help=" States your input as fastq format")
  parser.add_argument("-fasta", action="store_true", help=" States your input as fasta format")
  parser.add_argument("-o", "--output", action='store', dest='output', help="Directs the output to a name of your choice")
  
  
  args = parser.parse_args()
  def class_chars(chrs):
      if 'N' in chrs:
          return 'unknown'
      elif chrs[0] == chrs[1]:
          return 'match'
      else:
          return 'not_match'
  
  with open(output, 'w') as output_file:
  
  
  
      s1 = 'aaaaaaaaaaN123bbbbbbbbbbQccc'
      s2 = 'aaaaaaaaaaN456bbbbbbbbbbPccc'
      n = 0
      consec_matches = []
      chars = defaultdict(int)
  
      for k, group in groupby(zip(s1, s2), class_chars):
          elems = len(list(group))
          chars[k] += elems
          if k == 'match':
              consec_matches.append((n, n+elems-1))
          n += elems
  
      print (chars)
      print (consec_matches)
      print ([x for x in consec_matches if x[1]-x[0] &gt;= 9])
      list = [x for x in consec_matches if x[1]-x[0] &gt;= 9]
      flatten_list= [x for y in list for x in y]
      print (flatten_list)
      matching=[y[1] for y in list for x in y if x ==0 ]
      print (matching)
      magic = lambda matching: int(''.join(str(i) for i in matching)) # Generator exp.
      print (magic(matching))
      s2_l = s2[magic(matching):]
      line3=s1+s2_l
      print (line3)
      if line3:
          output_file.write("%s\n" % item)
  </code></pre>