dinsdag 10 januari 2012

Een txt-document omzetten naar een matrix: hoe?

Om een sudoku te laten lezen op een automatische manier en die om te zetten in een door Python leesbare matrix moest ik eerst eventjes zoeken in de basis van het openen en schrijven van documenten: de functie open().

Op basis daarvan heb ik dan een functie readfile() gemaakt die de tekst opent en omzet in een lijst van lijnen. Om de verschillende sudokus gemakkelijk te kunnen manipuleren heb ik een functie classify() gemaakt die de lijnen lezen en de verschillende sudokus groeperen in een dictionnary.

Om de functies te zien, klik op meer lezen.



#define functions needed to convert text file to matrixes
def readfile(filename):
    #verificate filename to avoid '\'
    filename = filename.replace("\\","/")
    
    lines = open(filename).readlines()

    #avoids end of line space marker "\n"
    for i in range(len(lines)):
        line = lines[i]

        lines[i] = line.replace("\n","")

    return lines



def classify(lines,rootname="",only_suffix=1,digit=1):
    dico = {}
    els = []
    name = ""
    
    for i in range(len(lines)):
        line = lines[i]


        if rootname in line:
            
            if not len(els) == 0:
                if digit:
                    dico.update({name:[[int(char)for char in el] for el in els]})
                else:
                    dico.update({name:els})
            
            els = []


            if only_suffix:
                try:
                    name = int(line.replace(rootname,""))
                except:
                    name = line.replace(rootname,"")
            else:
                name = line


        elif i == len(lines)-1:
            els += [line]
            
            if digit:
                dico.update({name:[[int(char) for char in el]
                                              for el in els]})
            else:
                dico.update({name:els})
        else:
            els += [line]


    return dico

Geen opmerkingen:

Een reactie posten