def file_create(record_type, parametres): """ Création du fichier en sortie : XML, iso2709 ou tabulé """ file = object id_filename = "-".join([parametres["outputID"], record_type]) if (parametres["format_file"] == 3): filename = id_filename + ".txt" file = open(filename, "w", encoding="utf-8") headers = ["Numéro de notice", "Type de notice" ] + parametres["select_fields"].split(";") funcs.line2report(headers, file, display=False) elif (parametres["format_file"] == 2): output_encoding = "utf-8" if ("xml_encoding_option" in parametres): output_encoding = parametres["xml_encoding_option"] filename = id_filename + ".xml" file = open(filename, "w", encoding=output_encoding) file.write(f"<?xml version='1.0' encoding='{output_encoding}'?>\n") file.write("<collection>") else: filename = id_filename + ".iso2709" file = mc.MARCWriter(open(filename, "wb")) return file
def record2file(identifier, XMLrec, file, format_file, parametres, dict_files): """ Conversion de la notice XML trouvée en ligne -> incrémentation dans le fichier en sortie Si option cochée, réécriture de la notice "identifier" est une instance de la classe Id4record """ #Si fichier tabulé if (format_file == 3): doctype, recordtype, entity_type = sru.extract_docrecordtype( XMLrec, "marc") line = [identifier.NumNot, doctype + recordtype] for field in parametres["select_fields"].split(";"): value = sru.record2fieldvalue(XMLrec, field) line.append(value) funcs.line2report(line, dict_files["bib_file"], display=False) # Si sortie en iso2709 elif (format_file == 1): XMLrec_str = XMLrecord2string(identifier, XMLrec, parametres) filename_temp = XMLrec2isorecord(XMLrec_str) collection = mc.marcxml.parse_xml_to_array(filename_temp, strict=False) # collection.force_utf8 = True for record in collection: record.force_utf8 = True try: file.write(record) except UnicodeEncodeError as err: errors_list.append([XMLrec_str, str(err)]) try: os.remove(filename_temp) except FileNotFoundError: pass # si sortie en XML if (format_file == 2): record = XMLrecord2string(identifier, XMLrec, parametres) file.write(record)