Newbie:Inhalt eine txt Datei als Liste zu speichern

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.
kampfDemError
User
Beiträge: 5
Registriert: Donnerstag 13. Dezember 2007, 00:59

Newbie:Inhalt eine txt Datei als Liste zu speichern

Beitragvon kampfDemError » Donnerstag 13. Dezember 2007, 01:27

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=]pfad = "meinVerzeichnis"
dateiname="text.txt"
datei = pfad+dateiname
in_file = open(datei,"r")
liste = in_file.read()

in_file.close()

print liste[1][/code]

wenn ich folgendes tue, klappt das
mit der richtigen Ausgabe:

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


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

Lg

Daniel
BlackJack

Beitragvon BlackJack » Donnerstag 13. Dezember 2007, 08:19

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.
Pablo Escobar
User
Beiträge: 21
Registriert: Montag 12. November 2007, 15:15
Wohnort: Stuttgart

Beitragvon Pablo Escobar » Donnerstag 13. Dezember 2007, 08:20

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
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

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

Beitragvon meneliel » Donnerstag 13. Dezember 2007, 08:31

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=]pfad = "meinVerzeichnis"
dateiname="text.txt"
datei = pfad+dateiname
in_file = open(datei,"r")
liste = in_file.read()

in_file.close()

print liste[1][/code]



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.
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Beitragvon Jan-Peer » Donnerstag 13. Dezember 2007, 09:32

.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 ...
kampfDemError
User
Beiträge: 5
Registriert: Donnerstag 13. Dezember 2007, 00:59

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

Beitragvon kampfDemError » Donnerstag 13. Dezember 2007, 11:01

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
schueler
User
Beiträge: 8
Registriert: Mittwoch 30. Mai 2007, 10:24

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

Beitragvon schueler » Donnerstag 13. Dezember 2007, 11:06

kampfDemError hat geschrieben:[code=]pfad = "meinVerzeichnis"
dateiname="text.txt"
datei = pfad+dateiname
in_file = open(datei,"r")[/code]


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
Women are ment to be loved not understood.

- Oscar Wilde
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Donnerstag 13. Dezember 2007, 15:01

Mit "eval" würde man bei dem Dateiformat auch gut vorankommen *duck*
BlackJack

Beitragvon BlackJack » Donnerstag 13. Dezember 2007, 15:21

*steinwerf* Ach mist, er hat sich ja geduckt. :-)
kampfDemError
User
Beiträge: 5
Registriert: Donnerstag 13. Dezember 2007, 00:59

weitere Frage

Beitragvon kampfDemError » Freitag 14. Dezember 2007, 09:28

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=]
[[0,["String","test"],[0,["String","test"]][/code]

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: weitere Frage

Beitragvon gerold » Freitag 14. Dezember 2007, 09:50

kampfDemError hat geschrieben:[code=][[0,["String","test"],[0,["String","test"]][/code]

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
kampfDemError
User
Beiträge: 5
Registriert: Donnerstag 13. Dezember 2007, 00:59

danke

Beitragvon kampfDemError » Freitag 14. Dezember 2007, 10:34

das probiere ich gleich aus
super vielen dank

lg
Daniel
kampfDemError
User
Beiträge: 5
Registriert: Donnerstag 13. Dezember 2007, 00:59

Problem gelöst

Beitragvon kampfDemError » Freitag 14. Dezember 2007, 11:44

Hallo zusammen,

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

[code=]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[/code]

Vielen Dank und liebe Grüße

Daniel
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 14. Dezember 2007, 16:09

Um Pfade und Dateinamen zu verketten nimmt man `os.path.join`, das setzt die entsprechenden Trennzeichen (Doppelpunkt, Slash, Backslash) automatisch und richtig.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder