Seite 1 von 1

Sortierte Ausgabe in eine Datei

Verfasst: Mittwoch 27. März 2013, 13:41
von recnice
Hallo,
ich habe folgendes Problem:

ich möchte bestimmte Daten aus einer Datei auslesen und diese in eine neue Datei speichern, dabei soll eine bestimmt Reihenfolge eingehalten werden und zwar wie sie in sorted_list vorhanden ist.
Hier mein (abgespeckter) Code:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

sorted_list = ['18693', '18625', '18560', '18634', '18593', '18549', '18619', '18585', '18597', '18595', '18583', '18594', '18569', '18692', '18576', '18579', '18548', '18578', '18566', '18587', '18584', '18596', '18556', '18621', '18635', '18539', '18620', '18618', '18612', '18614', '18613', '18610', '18615', '18616', '18611', '18538', '18574', '18598', '18567', '18557', '18572', '18592', '18577', '18565', '18575', '18617', '18606', '18608', '18607', '18604', '18636', '18609', '18602', '18603', '18605', '18637', '18590', '18591', '18573', '18600', '18589', '18582', '18580', '18571', '18581', '18588', '18601', '18537', '18586', '18599', '18559']

with open("boundary_values_step_0.01_cycle_1.dat","r") as infile:
     with open("output.dat",'w') as outfile:
        nodes     = []
        pressure = []
        xcoord    = []
        ycoord    = []
        zcoord    = []


        data = infile.readlines()
        #print data
        for entry in data:
            values = entry.split()
            if values[2] == "1":
                for knoten in sorted_list:
                    if knoten == values[3]:
                        #print knoten
                        pressure_node = float(values[6]) * (-1.0)
                        #print pressure_node
                        x_coord_node  = values[11]
                        y_coord_node  = values[12]
                        z_coord_node  = values[13]

                        pressure.append(pressure_node)
                        xcoord.append(x_coord_node)
                        ycoord.append(y_coord_node)
                        zcoord.append(z_coord_node)
                            
                        outfile.write('{0:2s}  {1:3f}  {2:4s}  {3:5s}  {4:6s}\n'.format(knoten,pressure_node,x_coord_node,y_coord_node,z_coord_node))

Wenn ich das nun laufen lassen, wird die Reihenfolge nicht eingehalten. In sorted_list folgt dem u.a. dem Eintrag '18557' die '18565',
in der Datei output.dat folgt dem Eintrag '18557' die '18559',
Hat jemand eine Idee, wie ich das hinbekomme?

Gruß

Re: Sortierte Ausgabe in eine Datei

Verfasst: Mittwoch 27. März 2013, 14:04
von Sirius3
Hallo recnice,

Du benutzt auch die Reihenfolge wie sie in der Datei boundary_values_step_0.01_cycle_1.dat steht.
Willst Du die Sortierung wie sorted_list, mußt Du erst die gesamte Datei einlesen (am Besten in ein dict mit Key value[3])
und danach die Ausgabedatei in der Reihenfolge von sorted_list schreiben.

Grüße
Sirius

Re: Sortierte Ausgabe in eine Datei

Verfasst: Mittwoch 27. März 2013, 15:30
von recnice
Hi,
danke für die Antwort. Hast du für
erst die gesamte Datei einlesen (am Besten in ein dict mit Key value[3])
vielleicht einen Codeschnipsel....


Gruß

Re: Sortierte Ausgabe in eine Datei

Verfasst: Mittwoch 27. März 2013, 16:05
von Sirius3

Code: Alles auswählen

boundary_values = {}
with open("boundary_values_step_0.01_cycle_1.dat","r") as infile:
    for entry in infile:
        values = entry.split()
        if values[2] == "1":
            boundary_values[values[3]] = values
oder

Code: Alles auswählen

with open("boundary_values_step_0.01_cycle_1.dat","r") as infile:
    boundary_values = dict((values[3], values) for values in map(str.split, infile) if values[2] == '1')

Re: Sortierte Ausgabe in eine Datei

Verfasst: Mittwoch 27. März 2013, 17:43
von recnice
Super, das hilft!

Danke & Gruß