Seite 1 von 1

Newbie:Inhalt eine txt Datei als Liste zu speichern

Verfasst: Donnerstag 13. Dezember 2007, 01:27
von kampfDemError
Hallo zusammen,

Ich habe folgendes Problem:
habe ein txt.Datei mit diesem Inhalt:

["String1","String2","String3"]

nun möchte ich zum Beispiel nur "String2" ausgeben lassen.
Habe diese kurze Script, aber komme damit leider nicht weiter.

Code: Alles auswählen

pfad = "meinVerzeichnis" 
dateiname="text.txt"
datei = pfad+dateiname
in_file = open(datei,"r")
liste = in_file.read()

in_file.close()

print liste[1]
wenn ich folgendes tue, klappt das
mit der richtigen Ausgabe:

Code: Alles auswählen

liste=["String1","String2","String3"]
print liste[1]

Wo liegt mein Fehler?
Wuerde mich ueber einen Tip freuen.

Lg

Daniel

Verfasst: Donnerstag 13. Dezember 2007, 08:19
von BlackJack
In der Textdatei steht keine Liste sondern eine Zeichenkette. Einfachste Lösung ist es, die da nicht so rein zu schreiben, sondern zum Beispiel das `csv`-Modul zu benutzen, um eine oder mehrere Listen in eine Datei zu schreiben und wieder zu lesen.

Verfasst: Donnerstag 13. Dezember 2007, 08:20
von Pablo Escobar
ich bin ja kein python spezialist
aber wenn du:

Code: Alles auswählen

liste = in_file.read()
machst, sollte liste ein string sein
sprich du müsstest liste noch mal splitten

also mein vorschlag wäre die änderung:

Code: Alles auswählen


in_file = open(datei,'r')
contents = in_file.read()
liste = contents.split()
print liste[1]


dann sollte das ganze klappe

edit:
wenn du mein beispiel nimmst musste deine txt noch leicht verändern
anstatt ["string1","string2","string3"]
machste string1 string2 string3

Re: Newbie:Inhalt eine txt Datei als Liste zu speichern

Verfasst: Donnerstag 13. Dezember 2007, 08:31
von meneliel
Guten Morgen Daniel,
kampfDemError hat geschrieben:Hallo zusammen,

Ich habe folgendes Problem:
habe ein txt.Datei mit diesem Inhalt:

["String1","String2","String3"]

nun möchte ich zum Beispiel nur "String2" ausgeben lassen.
Habe diese kurze Script, aber komme damit leider nicht weiter.

Code: Alles auswählen

pfad = "meinVerzeichnis" 
dateiname="text.txt"
datei = pfad+dateiname
in_file = open(datei,"r")
liste = in_file.read()

in_file.close()

print liste[1]
Hast du dir mal "liste" ausgeben lassen? Da sieht man recht schnell, warum es nicht funktioniert:

Code: Alles auswählen

[Programme\Console]|9> liste = in_file.read()                  
[Programme\Console]|10> liste                                  
                   <10> '["String1","String2","String3"] \n'  

Du musst in der Textdatei die Strings nicht schon als Liste eingeben, um dann eine Liste daraus zu machen.

Wenn in der Textdatei einfach : String1, String2, String 3 steht, sieht das alles folgender Maßen aus:

Code: Alles auswählen

[Programme\Console]|16> in_file = open(datei,"r")      
[Programme\Console]|17> liste = in_file.read()         
[Programme\Console]|18> liste                          
                   <18> 'String1,String2,String3 \n'   
[Programme\Console]|26> liste_neu= liste.strip(" \n")       
[Programme\Console]|27> liste_neu                           
                   <27> 'String1,String2,String3'           
[Programme\Console]|28> liste_fertig = liste_neu.split(",") 
[Programme\Console]|29> liste_fertig                        
                   <29> ['String1', 'String2', 'String3']   
Hoffe, dass hilft die irgendwie weiter.
Wenn du die Form, wie es in der Text-Datei steht, aber nicht ändern kannst, musst halt die [] entfernen. Du brauchst die Strings in der Textdatei auch nicht extra noch in "" schreiben, da sie eh als Strings gelesen werden.

EDIT: ups, da war ich wohl zu langsam.

Verfasst: Donnerstag 13. Dezember 2007, 09:32
von Jan-Peer
.read() ist für deinen Ansatz vielleicht nicht ganz das richtige. Schau mal hier, vielleicht findest du da was brauchbares ... Natürlich müßte die Datei entsprechend präpariert sein ...

Re: Newbie:Inhalt eine txt Datei als Liste zu speichern

Verfasst: Donnerstag 13. Dezember 2007, 11:01
von kampfDemError
Hallo,

vielen dank für die antworten.
Ich hoffe ich komme jetzt damit weiter.
Die txt dateien kann ich leider nicht verändern.

Besten Gruss

Daniel

Re: Newbie:Inhalt eine txt Datei als Liste zu speichern

Verfasst: Donnerstag 13. Dezember 2007, 11:06
von schueler
kampfDemError hat geschrieben:

Code: Alles auswählen

pfad = "meinVerzeichnis" 
dateiname="text.txt"
datei = pfad+dateiname
in_file = open(datei,"r")
Soweit stimmt ja noch alles. Für den Weg danach ein paar Tipps

Am besten speicherst du deine strings anders und suchst dir ein einheitliches Trennzeichen, zB '#' also String1#String2#String3

Und dann würde ich am einfachsten das ganze über eine Iteration starten.

Code: Alles auswählen

liste=[]

a=in_file.readlines()

for b in a:
          d,e,f=b.split('#')
          f=f.strip()
          liste.append(d)
          liste.append(e)
          liste.append(f)

print liste[1]
einfacher wird es natürlich, wenn du nach jedem satz einen Absatz machst, da du dir dann das splitten sparst. Dann musst du lediglich strippen und hast immer nur ein Argument, das du appenden musst.

Mfg ich

Verfasst: Donnerstag 13. Dezember 2007, 15:01
von EyDu
Mit "eval" würde man bei dem Dateiformat auch gut vorankommen *duck*

Verfasst: Donnerstag 13. Dezember 2007, 15:21
von BlackJack
*steinwerf* Ach mist, er hat sich ja geduckt. :-)

weitere Frage

Verfasst: Freitag 14. Dezember 2007, 09:28
von kampfDemError
Hallo zusammen,

danke nochmal für die zahlreichen tips.
Ich habe ein paar sachen ausprobiert.
Eine Frage hätte ich noch:

Wenn ich eine txt datei mit einer Liste habe, zum Beispiel in der Form:

Code: Alles auswählen

[[0,["String","test"],[0,["String","test"]]
gibt es da eine eine Möglichkeit das auszulesen, so dass es direkt als Liste erkannt wird? So etwas wie readlines() für Listen?
Ich habe das CSV Modul ausprobiert, hatte aber keinen Erfolg damit.

Schönen Tag

Daniel

Re: weitere Frage

Verfasst: Freitag 14. Dezember 2007, 09:50
von gerold
kampfDemError hat geschrieben:

Code: Alles auswählen

[[0,["String","test"],[0,["String","test"]]
Hallo Daniel!

Fehlen da zwei Klammern?

Falls ja:

Code: Alles auswählen

>>> import simplejson # http://cheeseshop.python.org/pypi/simplejson
>>> s = """[[0,["String","test"],[0,["String","test"]]]]"""
>>> simplejson.loads(s)
[[0, [u'String', u'test'], [0, [u'String', u'test']]]]
>>> 
Das geht auch mit deiner ersten Frage:

Code: Alles auswählen

>>> s = """["Hallo", "Welt"]"""
>>> my_list = simplejson.loads(s)
>>> my_list[0]
u'Hallo'
>>> my_list[1]
u'Welt'
>>> 
mfg
Gerold
:-)

danke

Verfasst: Freitag 14. Dezember 2007, 10:34
von kampfDemError
das probiere ich gleich aus
super vielen dank

lg
Daniel

Problem gelöst

Verfasst: Freitag 14. Dezember 2007, 11:44
von kampfDemError
Hallo zusammen,

simplejson hat mein problem gelöst.
das sieht jetzt so aus:

Code: Alles auswählen

import simplejson
pfad = "meinVerzeichnis"
dateiname="meineDatei"
datei = pfad+dateiname
in_file = open(datei,"r")
liste = in_file.read()
in_file.close()
neueListe=simplejson.loads(liste) 
print neueListe
Vielen Dank und liebe Grüße

Daniel

Verfasst: Freitag 14. Dezember 2007, 16:09
von Leonidas
Um Pfade und Dateinamen zu verketten nimmt man `os.path.join`, das setzt die entsprechenden Trennzeichen (Doppelpunkt, Slash, Backslash) automatisch und richtig.