class TTPDecoder: """Decodes teryt, jst name and paragraph 4.""" def __init__(self, teryt_file, jst_file, par_file): """Initiates TTPDecoder by creating all single decoders. Arguments: teryt_file -- name of file with TERYT codes jst_file -- name of file with jst codes par_file -- name of file with paragraphs """ self.teryt_decoder = TerytDecoder(teryt_file) self.jst_decoder = JSTDecoder(jst_file) self.par_decoder = ParDecoder(par_file) self.header_transform_dict = { u'Kod województwa wg GUS': u'Województwo', u'Kod powiatu wg GUS': u'Powiat', u'Kod gminy wg GUS': u'Gmina', u'Typ gminy': u'Typ jednostki', u'Finansowanie paragrafu - 4 cyfra paragrafu': u'Finansowanie' } def decode_file(self, source_filename, result_filename): """Decodes given file. Arguments: source_filename -- name of file to decode result_filename -- name of file to save decoded data """ csv_file = CsvFile(source_filename, delim=';', quote='"') csv_data = CsvData(csv_file) new_header = self.decode_header(csv_data.get_header()) new_rows = [] row = csv_data.get_next_row(row_type='list') i = 0 while row: i += 1 changed_row = row[:] is_jst = row[4] in ['z', 'Z'] changed_row[1] = self.teryt_decoder.get_name(row[1]) if changed_row[1] is None: print i if is_jst: changed_row[2] = self.teryt_decoder.get_name(row[1] + row[2]) if changed_row[2] is None: print i changed_row[3] = self.jst_decoder.get_name(row[6][1:]) # decoder has xyz, file has 0xyz if changed_row[3] is None: print i changed_row[4] = u'Związek JST' else: type = self.teryt_decoder.get_type(row[1]) if row[2] != '00': changed_row[2] = self.teryt_decoder.get_name(row[1] + row[2]) if changed_row[2] is None: print i type = self.teryt_decoder.get_type(row[1] + row[2]) else: changed_row[2] = '' if row[3] != '00': changed_row[3] = self.teryt_decoder.get_name(row[1] + row[2] + row[3]) if changed_row[3] is None: print i type = self.teryt_decoder.get_type(row[1] + row[2] + row[3]) else: changed_row[3] = '' changed_row[4] = type self.clean_row(changed_row) new_rows.append(changed_row) row = csv_data.get_next_row(row_type='list') csv_file.close() new_data = Data([new_header] + new_rows, result_filename) new_data.save() def decode_header(self, header): """Decodes fields in header, returns changed header. Arguments: header -- header of file """ changed_header = [] for field in header: try: changed_header.append(self.header_transform_dict[field]) except KeyError: changed_header.append(field) self.clean_row(changed_header) return changed_header def clean_row(self, row): """Removes unnecessary fields from row.""" del row[6] del row[5] return row