Beispiel #1
0
 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'
     }
Beispiel #2
0
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