In [1]:
import csv
import ast
In [2]:
#Vytvorenie prazdneho pola, do ktoreho budeme davat nove kategorie z csv suboru.
categories = []
In [3]:
"""
Otvorenie existujuceho suboru pomocou open na citanie. To ze ho otvarame na citanie znaci "r",
otvorenie a zaroven vytvorenie noveho suboru products-out, kde znaci w ako zapis do suboru.
V tejto chvili premenne infile obsahuje subor products1 a premenna outfile subor products-out1
"""
with open("csv/products.csv", "r") as infile, open("csv/products-out.csv", "w") as outfile:
    """pomocou readeru si nastavime ze budeme riadky a stlpce z csv suboru
    products1 citat
    """
    reader = csv.reader(infile)
    """
    pomocou writeru nastavime, ze budeme riadky a stlpce zapisovat do suboru producst-out1
    """
    writer = csv.writer(outfile)
    """
    vytvorime si novu hlavicku pre subor products-out1. Na csv sa mozeme pozerat ako na pole
    hlavicka obsahuje teraz dva stlpce, crc32 a category
    """
    new_header = ['crc32', 'category']
    """
    v dalsom kroku hned hlavicku do suboru zapiseme pomocou writerow 
    v tejto chvili mame vytvore csv s jednym riadkom obsahujucim crc32 a category
    """
    writer.writerow(new_header)
    
    """
    prechadzame subor products1 po riadkoch, 
    kde index_row cisluje a zacina od 0 a pokracuje 1, 2, 3 az po koniec vsetkych riadkov
    
    v tejto chvili je index_row = 0
    data_in_row - obsahuje cely jeden riadok
    """
    for index_row, data_in_row in enumerate(reader):
        
        """
        prechadzame stlpce, kde index_col znovu cisluje stlpce od 0, pokracuje 1, 2..az
        pocet sltpcov, ktore ma csv products1
        
        v tejto chvili je index_col = 0
        data_in_cell obsahuju uz konretnu hodnotu z riadku pre dany stlpec (napriklad nivea)
        """
        for index_col, data_in_cell in enumerate(data_in_row):
            
            """
            podmienka, aby sme preskocili hlavicku a zacala az od prveho riadku, kde su uz data
            """
            if index_row > 0:
                
                """
                podmienka, ze pracujeme so stlpcom 3, v ktorom su informacie o 
                kategoriach v csv subore products1
                """
                if index_col == 2:
                    
                    """
                    pridanie do pola categories
                    vytvarame tu 2d pole, ktore obsahuje
                    - hodnotu kategorie z data_in_row[2] - lebo stlpec kategoria je v csv
                    treti a nachadza sa tam teraz toto napriklad
                    {'id': 300109000}, {'id': 300109103}
                    v csv subore je vsak vsetko ako string, preto to potrebujeme
                    pomocou ast.literal_eval pretypovat na list v pythone
                    
                    - druhy prvok pola je hodnota z data_in_row[4] kde sa v nasom csv
                    nachadza stlpec crc32
                    """
                    try:
                        categories.append([ast.literal_eval(data_in_row[2]), data_in_row[4]])
                    except:
                        pass
        
    
    """
    v tejto chvili pole kategorii obsahuje
    zoznam vsetkych kategorii z csv a ich ideciek
    vyzera to nejako takto
    
    [[{'id': 300109000}, {'id': 300109103}, {'id': 300109109}, {'id': 300109110}], '4119786657']
    [[{'id': 300109000}, {'id': 300109103}, {'id': 300109104}, {'id': 300109105}], '3818404418']
    """
    for category in categories:
        
        """
        vidime ze categories maju v sebe pole slovnikov preto musime
        dat znovu for cyklus ktory prejde iba prvym prvkom pola
        , kde je slovnik kategorii
        """
        for c in category[0]:
            
            """
            znovu preskocime iba zapis hlavicky v csv ak je vetsia ako 0
            """
            if index_row > 0:
                
                """
                zapis pola, kde v category[1] je nase id z crc32
                a c.get('id') obsahuje uz konkretne id zo slovnika
                """
                writer.writerow([category[1], c.get('id')])


    print ("========= Creating the categories table is done ========")
    infile.close()
    outfile.close()
========= Creating the categories table is done ========
In [4]:
import pandas as pd
newFrame = pd.read_csv("csv/products-out.csv")
oldFrame = pd.read_csv("csv/products.csv")
In [5]:
newFrame.shape
Out[5]:
(57299, 2)
In [6]:
oldFrame.shape
Out[6]:
(10957, 23)