Liste aufteilen

Code-Stücke können hier veröffentlicht werden.
Antworten
Dr. Zoidberg
User
Beiträge: 2
Registriert: Dienstag 9. Oktober 2007, 15:01

Dienstag 9. Oktober 2007, 15:18

Hallo!

Dies ist mein erster Beitrag und gleich hab ich ne Frage. Also bitte nicht hauen.

Eine Liste dient zum Aufteilen von Proben. Das heisst jemand hat zum Beispiel 350 Proben, die er auf eine Platte mit 384 Loechern haben will. Das Problem ist ich habe nur Platten mit 96 Loechern. Ich kann aber aus 4 Platten a 96 eine Platte mit 384 Positionen machen. Dazu muss ich aber die Positionen der 384 Platte auf die 4 96 Platten verteilen.
Das Skript soll also bei Eingabe eines Wertes in Spalte B den Wert in den zugehoerigen Quadranten Q1-Q4 schreiben.
Ich habe soweit die Mathematik gemeistert :D
Jetzt muss ich noch dazukommen die Liste, die als .csv vorliegt, zu bearbeiten und dann unter einem neuen Namen zu speichern. Eine Beispielliste liegt hier:
http://www.netupload.de/detail.php?img= ... 79eb2d.csv
In der neuen Liste soll in der 4.Spalte der Quadrant und in der 5. die Position stehen.
Also ungefahr so:
http://www.netupload.de/detail.php?img= ... 43740c.csv

Hier ist der Code zur Mathematik

Code: Alles auswählen

import math

def get96Pos(lst384Pos):
    row = lst384Pos[0]
    col = lst384Pos[1]
    return [math.ceil(row/2.0),math.ceil(col/2.0)]


def get96Quad(lst384Pos):
    row = lst384Pos[0]
    col = lst384Pos[1]
    if row%2 == 1:
        if col%2 == 1:
            return 1
        elif col%2 == 0:
            return 3
    elif row%2 == 0:
        if col%2 == 1:
            return 2
        elif col%2 == 0:
            return 4

if __name__ == '__main__':
    #(row, col)
    [color=red]pos384 = [14,15][/color]
    print get96Pos(pos384)
    print get96Quad(pos384)
Edit (BlackJack): Code in Code-Tags gesetzt.
BlackJack

Dienstag 9. Oktober 2007, 17:41

Für CSV-Dateien gibt's das `csv`-Modul aus der Standardbibliothek.

Ansonsten reichen IMHO die Informationen nicht aus. Man müsste zum Beispiel die Dimensionen der Platten kennen. Und wie die Proben verteilt werden sollen. Eine (ungetestete) Möglichkeit:

Code: Alles auswählen

class CombinedBoard(object):
    def __init__(self, part_width, part_height, x_parts, y_parts):
        self.part_width = part_width
        self.part_height = part_height
        self.x_parts = x_parts
        self.y_parts = y_parts
    
    def get_part_and_coordinates(self, x, y):
        x_part, x_offset = divmod(x, self.part_width)
        y_part, y_offset = divmod(y, self.part_height)
        if x_part > self.x_parts or y_part > self.y_parts:
            raise ValueError('coordinates not on combined board')
        return x_part, y_part, x_offset, y_offset
Im Konstruktor muss man Breite und Höhe einer kleinen Platte angeben und wieviele von diesen Platten jeweils neben und untereinander angeordnet werden sollen um eine grosse Platte zu ersetzen.

`get_part_and_coordinates()` rechnet dann zu einer Koordinate auf der grossen Platte die Koordinate der kleinen Platte und die Koordinate innerhalb der kleinen Platte aus.
Dr. Zoidberg
User
Beiträge: 2
Registriert: Dienstag 9. Oktober 2007, 15:01

Mittwoch 10. Oktober 2007, 08:03

Morgen!

Vielen Dank für die Denkanstösse.

Ich schau mir mal das csv Modul an.
Die kleine Platte hat eine 8x12 Matrix und die grosse eine 16x24.
Die Proben können innerhalb der 16x24 Matrix überall stehen.
Ich hab mal ne abgeänderte Liste angefertigt.
Ich stelle mir das so vor.
Öffne csv file, ignoriere erste zeile, überprüfe ob in der Value etwas steht, wenn ja rechne 96Pos, separiere row und column und 96Quad aus und schreibe es in ein file.
Hier sidn die geänderten Files:

Eingabe:

http://www.netupload.de/detail.php?img= ... 70c425.csv

Ausgabe:

http://www.netupload.de/detail.php?img= ... c82a5f.csv

Danke für die schnelle Hilfe und einen schönen Tag!
Antworten