Liste anlegen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
itchy_scratchy
User
Beiträge: 5
Registriert: Dienstag 24. April 2012, 13:19

Hallo liebes Forum,

ich habe ein kleines Problem, bei welchem ich einfach nicht weiterkomme. :(

Ich möchte eine neue Liste (data_tco) anlegen, welche ich als .csv speichere. (siehe Code)

Im ersten Schritt füge ich eine Textdatei in die Liste ein . Danach muss eine weitere Textdatei in die die Liste geschrieben werden. Und hier kommt das Problem: Diese soll nicht als neue Zeilen unter dem bereits vorhandenen eingefügt werden, sondern als neue Spalten am Ende der Liste.

Code: Alles auswählen

data_tco = []
b = open('analysis_'+name+part+'_'+'kmh.txt','r')
data_tco.append(b.read())
b.close()
b1 = open('tco_'+name+part+'.txt','r')
data_tco.append(b1.read())
b1.close()
savetxt('tco_gesamt'+name+'.csv', data_tco, '%s', ',')
Ich habe bereits verschiedenes probiert, bekomme die zweite Textdatei aber immer nur als neue Zeilen und nicht als Spalten eingefügt. Wie kann man derartiges machen? Hat jemand einen Tipp und kann mir hier aus der Patsche helfen?

Viele Grüße
Sebastian
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Was sind denn "Spalten am Ende einer Liste" :?:

Es ist zwar nett, dass Du uns Code zeigst, aber in diesem Falle wäre ein Beispieldatensatz wirklich sinnvoller ;-)

Ich rate jetzt mal:

Code: Alles auswählen

# erste Datendatei
1
2
42
69

Code: Alles auswählen

# zweite Datendatei
ab
cd
ef
gh
Und als Ergebnis willst Du:

Code: Alles auswählen

1  ab
2  cd
42 ef
69 gh
Sehe ich das richtig?

Wenn ja, hättest Du das so einfach darstellen können, oder? Wenn nein, dann bitte schildere und das einmal in dieser Art ;-)

Erst wenn man das Problem an sich verstanden hat, kann man Dir auch sinnvolle Tipps geben.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
itchy_scratchy
User
Beiträge: 5
Registriert: Dienstag 24. April 2012, 13:19

Entschuldige, dass ich mich wohl nicht richtig ausgedrückt habe! :(

Dein Vorschlag ist vom Prinzip genau richtig! Im Grund will ich es genau so haben!

Hier mal die Liste, wie es sie aktuell abspeichert. Ich will, dass der der untere Teil als "neue" Spalten rechts im oberen Teil der Tabelle angehängt wird. :?
  • 161.000, -26.388, 313.571, 47.663, 15.000, 7.702, -11.388, 0.760, 238.306, 0.000, 0.000, 0.000, 0.000
    171.000, -292.075, 1312.996, 313.806, 15.000, -109.508, -277.075, 0.064, 84.022, 0.000, 0.000, 0.000, 0.000
    181.000, -17.295, 276.713, 42.060, 15.000, 8.454, -2.295, 0.893, 247.076, 0.000, 0.000, 0.000, 0.000
    191.000, -16.018, 371.512, 72.073, 15.000, 11.616, -1.018, 0.976, 362.612, 0.000, 0.000, 0.000, 0.000
    201.000, -11.751, 198.490, 30.170, 15.000, 14.280, 3.249, 1.000, 198.490, 0.000, 0.000, 0.000, 0.000

    161.000, 1.000, 2971.718
    171.000, 1.000, 11125.969
    181.000, 1.000, 2963.934
    191.000, 1.000, 5662.717
    201.000, 1.000, 2947.413
Vielen Dank für Deine Hilfe!
Sebastian
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ok, also in der Shell mal als Grundgerüst (für Python3):

Code: Alles auswählen

In [47]: import csv

In [48]: from itertools import chain

In [49]: first = """161.000, -26.388, 313.571, 47.663, 15.000, 7.702, -11.388, 0.760, 238.306, 0.000, 0.000, 0.000, 0.000
   ....: 171.000, -292.075, 1312.996, 313.806, 15.000, -109.508, -277.075, 0.064, 84.022, 0.000, 0.000, 0.000, 0.000
   ....: 181.000, -17.295, 276.713, 42.060, 15.000, 8.454, -2.295, 0.893, 247.076, 0.000, 0.000, 0.000, 0.000
   ....: 191.000, -16.018, 371.512, 72.073, 15.000, 11.616, -1.018, 0.976, 362.612, 0.000, 0.000, 0.000, 0.000
   ....: 201.000, -11.751, 198.490, 30.170, 15.000, 14.280, 3.249, 1.000, 198.490, 0.000, 0.000, 0.000, 0.000"""

In [50]: second = """161.000, 1.000, 2971.718
   ....: 171.000, 1.000, 11125.969
   ....: 181.000, 1.000, 2963.934
   ....: 191.000, 1.000, 5662.717
   ....: 201.000, 1.000, 2947.413"""

In [51]: in_first = csv.reader(io.StringIO(first), delimiter=",")
In [52]: in_second = csv.reader(io.StringIO(second), delimiter=",")

In [53]: for row in zip(in_first, in_second):
   ....:     print(list(chain.from_iterable(row)))
   ....:     
['161.000', ' -26.388', ' 313.571', ' 47.663', ' 15.000', ' 7.702', ' -11.388', ' 0.760', ' 238.306', ' 0.000', ' 0.000', ' 0.000', ' 0.000', '161.000', ' 1.000', ' 2971.718']
['171.000', ' -292.075', ' 1312.996', ' 313.806', ' 15.000', ' -109.508', ' -277.075', ' 0.064', ' 84.022', ' 0.000', ' 0.000', ' 0.000', ' 0.000', '171.000', ' 1.000', ' 11125.969']
['181.000', ' -17.295', ' 276.713', ' 42.060', ' 15.000', ' 8.454', ' -2.295', ' 0.893', ' 247.076', ' 0.000', ' 0.000', ' 0.000', ' 0.000', '181.000', ' 1.000', ' 2963.934']
['191.000', ' -16.018', ' 371.512', ' 72.073', ' 15.000', ' 11.616', ' -1.018', ' 0.976', ' 362.612', ' 0.000', ' 0.000', ' 0.000', ' 0.000', '191.000', ' 1.000', ' 5662.717']
['201.000', ' -11.751', ' 198.490', ' 30.170', ' 15.000', ' 14.280', ' 3.249', ' 1.000', ' 198.490', ' 0.000', ' 0.000', ' 0.000', ' 0.000', '201.000', ' 1.000', ' 2947.413']
Anstelle des `print` musst Du eben ein `csv.writer` Objekt nutzen und von diesem die `writerow`-Methode (Oder auch `writerows`).

Edit: Ich könnte mir denken, dass `numpy` da auch etwas direkteres bietet... Deine Daten sehen ja stark nach numerischen Daten aus...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten