Wort aus Text auslesen.

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.
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Samstag 10. Mai 2008, 18:27

Hallo Leute,
ich habe eine Textdatei und öffne diese mit meinem Pythonprogramm,
diese Textdatei hat nur eine Zeile, doch will ich jetzt ein Wort bzw. eine
Zahl aus dieser Zeile herausnehmen und in eine extra Datei speichern.
Kann man irgendwie angeben der wievielte Buchstabe rausgeschrieben werden soll? Denn ich will natülich eine bestimmte Zahl aus der Textdatei
herausschreiben.
Schon mal vielen Dank. :-)

Viele Grüße
Teabag
ck
User
Beiträge: 11
Registriert: Samstag 10. Mai 2008, 17:44
Kontaktdaten:

Samstag 10. Mai 2008, 18:39

Hi,
Probiers mal damit:

Code: Alles auswählen

>>> text = "Hallo"
>>> print text[0]
H
>>> print text[0:3]
Hal
>>> print text[1:4]
all
>>> print text[-1]
o
So gibst du an den/die wievielten Buchstaben du aus einem Text nehmen wilst
Achtung: 0 ist der erste Buchstabe (-1 ist der letzte)
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Samstag 10. Mai 2008, 21:30

Vielleicht noch eine Ergänzung. Vielleicht nicht dir das schon den schwersten Teil der Arbeit ab:

Code: Alles auswählen

>>> "das ist eine zeile mit mehreren woertern".split(" ")
['das', 'ist', 'eine', 'zeile', 'mit', 'mehreren', 'woertern']
Hast du das Tutorial schon durchgearbeitet, dann Frage hört sich noch sehr grundlegend an.

Bis dann.
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Samstag 10. Mai 2008, 23:05

Vielen Dank für eure Hilfe,
jetzt klappts :-)

gruß Teabag
Mycron
User
Beiträge: 12
Registriert: Samstag 10. Mai 2008, 20:18

Sonntag 11. Mai 2008, 16:39

Ich weiß ned ob ich dafür en Extra-Thread aufmachen soll, aber da das Problem darauf aufbaut hab ichs hier gepostet. Wenns falsch ist Sorry und bitte verschieben :)

Irgendwie will das bei mir mit split nicht ganz... Folgende Situation:

Habe eine Textdatei mit folgendem Inhalt
Erste Zeile
Zweite Zeile
Dritte Zeile
Des Ganze sollte ein Testlauf für ne Art "Datenbank" sein, drum der sinnlose Text. Was ich will ist, dass beides in ein Dictionary kommt, jeweils das erste Wort als Schlüssel und jeweils das Zweite als entsprechender Wert. Also hab ich folgenden Code gebastelt:

Code: Alles auswählen

datei = file('F:\Test.txt','r')
string = datei.readlines()
Wort = string.split(" ")
for z in Word:
    print z
datei.close()
Und da bekomm ich dann folgende Fehlermeldung:

Traceback (most recent call last):
File "E:/Python25/test", line 3, in <module>
Wort = string.split(" ")
AttributeError: 'list' object has no attribute 'split'

Ich weiß (oder besser: ich kann mir denken) das dieser Code für mein Vorhaben wahrscheinlich elends umständlich und kompliziert ist. Ich bin noch ziemlich neu im Programmieren und muss mir des selber beibringen, seit gnädig :D Aber ich weiß nicht wo da mein Fehler liegt. "String" besteht doch aus Strings, ned aus Listen...?!
Achtung, ein n00b! ;)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Sonntag 11. Mai 2008, 16:56

Die Methode readlines() liefert nicht eine Zeichenkette, sondern eine LISTE, bei jeder Eintrag einer Zeile der eingelesenen Datei entspricht.
Auch wenn du diese List dann "string" nennst (was eher nicht sinnvoll ist), wird daraus keine Zeichenkette ... :D
Mycron
User
Beiträge: 12
Registriert: Samstag 10. Mai 2008, 20:18

Sonntag 11. Mai 2008, 17:00

Die hab ich String genannt weil mir auf die Schnelle nihts besseres eingefallen ist ^^

Ok, gibt es denn dann eine Möglichkeit diese Liste als einzelne Strings aufzudröseln oder überhaupt eine andre Möglichkeit die einzelnen Worte da rauszubekommen?
Achtung, ein n00b! ;)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Sonntag 11. Mai 2008, 17:06

Sicher gibt es die Möglichkeiten.

Ich empfehle dringend die Lektüre des Tutorials. Da findest du solche Dinge gut erklärt.
ck
User
Beiträge: 11
Registriert: Samstag 10. Mai 2008, 17:44
Kontaktdaten:

Sonntag 11. Mai 2008, 17:10

Hi
Das problem ist, dass readlines() eine Liste zurückgibt:
["Erste Zeile","Zweite Zeile","Dritte Zeile"]
Um den String herauszubekommen musst du liste[0] in dem Fall string[0] schreiben.
Die Null steht für den ersten Eintrag in der Liste (-1 für den letzten)
Ich würde das so schreiben:

Code: Alles auswählen

datei = file('F:\Test.txt','r')
daten = datei.read() # weil readlines den Zeilenumbruch mitnimmt
datei.close()
liste = daten.split("\n") # das ist der Zeilen umbruch

woerter = liste[0].split(" ")
print woerter[0], "-", woerter[1]

woerter2 = liste[1].split(" ")
print woerter2[0], "-", woerter2[1]

woerter3 = liste[2].split(" ")
print woerter3[0], "-", woerter3[1]
Kan man mit einer Schleife natürlich verbessern:

Code: Alles auswählen

datei = file('F:\Test.txt','r')
daten = datei.read() # weil readlines den Zeilenumbruch mitnimmt
datei.close()
liste = daten.split("\n") # das ist der Zeilen umbruch

for i in range(len(liste)):
    
    woerter = liste[i].split(" ")
    print woerter[0], "-", woerter[1]
ck
User
Beiträge: 11
Registriert: Samstag 10. Mai 2008, 17:44
Kontaktdaten:

Sonntag 11. Mai 2008, 17:12

ups

Ich hab zum schreiben so lange gebraucht, dass derweil drei Einträge eingetragen wurden!
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Sonntag 11. Mai 2008, 17:28

@ck: In Python kannst du auch direkt über die Elemente einer Liste iterieren, den Umweg über die Indizes kannst du dir sparen:

Code: Alles auswählen

for elem in liste:
    woerter = elem.split(" ")
Mycron
User
Beiträge: 12
Registriert: Samstag 10. Mai 2008, 20:18

Sonntag 11. Mai 2008, 18:18

Wow, vielen Dank für die schnellen Antworten! :)

@pütone: Ich hatte mit dem Tutorial mal angefangen, bin aber nicht ganz durchgestiegen (wegen der Kombination aus Fachbegriffen und dem für einen damaligen 8-Klässler recht komplexen Englisch) und hab mir dann ein Buch gekauft. Da is die Kapitelreihenfolge n bissl unkonventionell ;)

@ck: Auf deine Idee bin ich auch mal kurz gekommen, hab ich dann aber verworfen, weil das ja dadurch, das man jeden String einzeln anspricht, recht umständlich ist und dachte da gibts bestimmt was praktischeres. Auf die Idee, das in eine Schleife zu packen, bin ich natürlich nicht gekommen ^^

@EyDu: Genau das meinte ich mit praktischer ^^ Danke, das werde ich gleich mal ausprobieren!

EDIT: Habe mich jetzt für ck's Lösung entschieden, das ist für mich leichter nachvollziehbar ;)
Zuletzt geändert von Mycron am Sonntag 11. Mai 2008, 18:28, insgesamt 1-mal geändert.
Achtung, ein n00b! ;)
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Sonntag 11. Mai 2008, 18:26

Code: Alles auswählen

fh = open('test.txt', 'r')
try:
    data = [line.split() for line in fh]
    print data
finally:
    fh.close()
Warum denn so umständlich? :D
Mycron
User
Beiträge: 12
Registriert: Samstag 10. Mai 2008, 20:18

Sonntag 11. Mai 2008, 18:34

Uff! Das ist das was ich am Anfang meinte, eine ultimative einfache Lösung auf nem andren Niveau ^^

Ok, mal sehen ob ich das versteh...
Also erstmal, wieso brauchst du nicht den vollen Pfad angeben, sondern nur den Namen? Warum "open" und nicht "file", gibts da Vorteile? Und Zeile 3 - 6 verstehe ich die Funktion nicht ganz, das is noch zu hoch für mich :D
Vor allem Zeile 4, da wäre ich froh wenn du mir die Funktionsweise mal aufdröseln könntest ^^

Besten Dank

Mycron
Achtung, ein n00b! ;)
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Sonntag 11. Mai 2008, 19:01

Eine LC ohne Prädikat entspricht übrigens einem "map":

Code: Alles auswählen

import string
with open('test.txt') as fh:
    data = map(string.split, fh)
    print data 
Antworten