title: Parsing plain text file into CSV with Python
body: <p>I was following the responses from this topic: <a href="https://stackoverflow.com/questions/19437207/python-parsing-structured-text-to-csv-format">Python: parsing structured text to CSV format</a> and I'm stuck when I'm exporting the data. I made some little modifications to the script proposed by the best voted result in the original topic, but I'm only able to get the last set of results into the CSV file and nothing else is written.</p>
  
  <p>The original text is:</p>
  
  <pre><code>Device ID:PE2-CONCE
  SysName:null
  Entry address(es):nullnullnullnull 
  IPv4 address:172.31.232.42
  Platform:Cisco 7204VXR Capabilities  Router 
  Interface:GigabitEthernet0/0/0/14
  Port ID (outgoing port):GigabitEthernet0/3
  Holdtime:168 sec
  Device ID:PE2-CORE-TEMUCO.entel.cl
  SysName:nullPE2-CORE-TEMUCO.entel.cl
  Entry address(es):nullnullnullnull 
  IPv4 address:200.72.146.226
  Platform:cisco ASR9K Series Capabilities  Router 
  Interface:TenGigE0/10/0/3
  Port ID (outgoing port):TenGigE0/10/0/3
  Holdtime:171 sec
  Device ID:PE2-PCS-RANCAGUA
  SysName:null
  Entry address(es):nullnullnullnull 
  IPv4 address:192.168.204.153
  Platform:cisco CISCO7606 Capabilities  Router Switch IGMP 
  Interface:TenGigE0/5/0/1
  Port ID (outgoing port):TenGigabitEthernet4/2
  Holdtime:163 sec
  Device ID:PE1-RECREO
  SysName:nullPE1-RECREO
  Entry address(es):nullnullnullnull 
  IPv4 address:200.72.146.103
  Platform:cisco ASR9K Series Capabilities  Router 
  Interface:TenGigE0/0/0/0
  Port ID (outgoing port):TenGigE0/0/1/0
  Holdtime:153 sec
  </code></pre>
  
  <p>And the code with little mods is:</p>
  
  <pre><code>def read_records(iterable):
      record = {}
      for line in iterable:
          if line.isalnum():
              # Nuevo registro, mantiene anterior
              if record:
                  yield record
              record = {}
              continue
          key, value = line.strip().split(":",1)
          record[key.strip()] = value.strip()
  
      # Archivo listo
      if record:
          yield record
  
  
  # Salida encabezados
  headers = ("Device ID", "SysName", "Entry address(es)", "IPv4 address", "Platform", "Interface", "Port ID (outgoing port)", "Holdtime")
  
  with open("inputFile.txt") as infile, open("outputFile.csv", 'wb') as outfile:
      records = read_records(infile)
      writer = csv.DictWriter(outfile, headers, delimiter=';')
      writer.writeheader()
  
      # and write
      writer.writerows(records)
  </code></pre>
  
  <p>I'm really stuck and I don't know why the script only writes the last set of data only. Please, can somebody help me please?</p>
  
  <p>Thanks in advance.</p>