<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Fill Database WaveForm Headers
1) Import de las librerias que utilizaremos
Step1:  2) Leemos el archivo con las WaveForm que vamos a utilizar
Step2:  3) Limpiamos los caracteres extraños y Dividimos la cadena donde pXXNNNN-YYYY-MM-DD-hh-mm donde XXNNNN es el identificador unico del paciente SUBJECT_ID y YYYY-MM-DD-hh-mm es la fecha de la estadia del paciente'
Step3:  4) Leemos el encabezado del waveform, para obtener la información del paciente que almacenaremos
Step4:  Le agregamos el subject_id y la fecha del record a los campos
Step5:  convertimos los campos en un diccionario
Step6:  Nos conectamos a la base de datos postgres donde almacenaremos los datos
Step7:  Creamos la tabla donde quedaran almacenados los datos
Step8:  verificamos si ya existe el dato
Step9:  Insertamos los datos
Step10:  Hacemos commit
Step11:  cerramos conexion
<ASSISTANT_TASK:>
Python Code:
import urllib.request
import wfdb
import psycopg2
from psycopg2.extensions import AsIs
Explanation: Fill Database WaveForm Headers
1) Import de las librerias que utilizaremos
End of explanation
target_url = "https://physionet.org/physiobank/database/mimic3wdb/matched/RECORDS-waveforms"
data = urllib.request.urlopen(target_url) # it's a file like object and works just like a file
lines = data.readlines();
line = str(lines[2])
line
Explanation: 2) Leemos el archivo con las WaveForm que vamos a utilizar
End of explanation
line = line.replace('b\'','').replace('\'','').replace('\\n','')
splited = line.split("/")
carpeta,subCarpeta,onda = line.split("/")
carpeta = carpeta+"/"+subCarpeta
subject_id = subCarpeta.replace('p','')
recordDate = onda.replace(subCarpeta+"-","")
print("subject_id: ",subject_id)
print("recordDate: ",recordDate)
print("onda: ",onda)
print("carpeta: ",carpeta)
Explanation: 3) Limpiamos los caracteres extraños y Dividimos la cadena donde pXXNNNN-YYYY-MM-DD-hh-mm donde XXNNNN es el identificador unico del paciente SUBJECT_ID y YYYY-MM-DD-hh-mm es la fecha de la estadia del paciente'
End of explanation
try:
    sig, fields = wfdb.srdsamp(onda,pbdir='mimic3wdb/matched/'+carpeta, sampto=1)
    print(fields)
except Exception as inst:
    print("onda vacia")
Explanation: 4) Leemos el encabezado del waveform, para obtener la información del paciente que almacenaremos
End of explanation
fields['subject_id'] = subject_id
fields['recordDate'] = recordDate
Explanation: Le agregamos el subject_id y la fecha del record a los campos
End of explanation
columns = fields.keys()
values = [fields[column] for column in columns]
print(columns)
Explanation: convertimos los campos en un diccionario
End of explanation
conn = psycopg2.connect("dbname=mimic")
cur = conn.cursor()
Explanation: Nos conectamos a la base de datos postgres donde almacenaremos los datos
End of explanation
table = "waveformFields"
#cur.execute("DROP TABLE "+table)
cur.execute("CREATE TABLE IF NOT EXISTS "+table+
            " (id serial PRIMARY KEY,"+
            "comments character varying(255)[],"+
            "fs integer, signame character varying(255)[],"+
            "units character varying(255)[],"+
 "subject_id integer,"+
            "recordDate character varying(255));")
Explanation: Creamos la tabla donde quedaran almacenados los datos
End of explanation
def track_not_exists(cur, subject_id,recordDate):
    select_stament = 'select id from '+table+' where subject_id= %s and recorddate = %s'
    cur.execute(select_stament,(int(subject_id),recordDate))
    return cur.fetchone() is None
#print(cur.mogrify(select_stament,(int(subject_id),recordDate)))
notExist = False
if track_not_exists(cur,subject_id,recordDate):
    notExist = True
    print("not exist")
Explanation: verificamos si ya existe el dato
End of explanation
insert_statement = 'insert into '+table+' (%s) values %s'
print(cur.mogrify(insert_statement, (AsIs(','.join(columns)), tuple(values))))
if notExist:
    cur.execute(insert_statement, (AsIs(','.join(columns)), tuple(values)))
Explanation: Insertamos los datos
End of explanation
conn.commit()
Explanation: Hacemos commit
End of explanation
conn.close()
Explanation: cerramos conexion
End of explanation
<END_TASK>