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.
ich habe mal wieder eine Dumme Frage. Ich habe ein Skript das soll mir aus einer Textdatei einen Wert auslesen und auswerten. ich scheitere omentan schon bei dem Wert...
Ich lese Die Datei Zeilenweise ein mit einer For-Schleife, dann prüfe ich bei jedem Durchlauf mit :
@bankkind: Die Funktionen im `string`-Modul, die auch als Methoden auf Zeichenketten existieren, sollte man nicht mehr verwenden. Ab Python 3.0 gibt's die nämlich nicht mehr.
str.find gibt -1 bei Nichtvorhandensein zurück. Will man etwas handfesteres sollte man str.index benutzen. Aber für tests auf Vorhandensein am besten "in" benutzen, wie von DasIch gezeigt.
BlackJack hat geschrieben:@bankkind: Die Funktionen im `string`-Modul, die auch als Methoden auf Zeichenketten existieren, sollte man nicht mehr verwenden. Ab Python 3.0 gibt's die nämlich nicht mehr.
OK, danke für den Tipp, aber gibt es hierfür Gründe? Welche Alternativen habe ich die ähnlich einfach zu handhaben sind?
Na der Grund ist, das die Funktionen doppelt vorhanden sind, eben einmal im Modul `strings` und als Methoden auf Zeichenketten. Da Python eine objektorientierte Sprache ist, hat man sich entschieden die alten Funktionen aus dem Modul als "deprecated" einzustufen, und dann in Python 3.0 endgültig zu entsorgen.
[code = py]
In [12]: string.find
Out[12]: <function find at 0x00BDB3F0>
In [13]: string.find?
Type: function
Base Class: <type 'function'>
String Form: <function find at 0x00BDB3F0>
Namespace: Interactive
File: c:\python25\lib\string.py
Definition: string.find(s, *args)
Docstring:
find(s, sub [,start [,end]]) -> in
Return the lowest index in s where substring sub is found,
such that sub is contained within s[start,end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
In [14]: "".find
Out[14]: <built-in method find of str object at 0x00A0A038>
In [15]: "".find?
Type: str
Base Class: <type 'str'>
String Form:
Namespace: Interactive
Length: 0
Docstring:
str(object) -> string
Return a nice string representation of the object.
If the argument is a string, the return value is the same object.
[/code]
OK! Und wenn es nicht nur ums vorhanden sein geht, sondern ich auch bestimmte Information aus dem zu durchsuchenden String brauche?
das heißt zum Beispiel:
String: (abc:1)(bcd:123test)(cde:ergebnis3)
Ich weiß jetzt das die Informationen die ich Suche immer in einer Zeile stehen, in klammern, hinter einem Doppelpunkt. Ich weiß aber nicht wie viele Blöcke es gibt... Der String ist jetzt völlig aus der Luft gegriffen, aber passt gerade.
mein ziel sind also die informationen: 1, 123test und ergebnis3
Ich muss dazu sagen, dass ich bisher noch keine möglichkeit gefunden habe...
In [30]: s = ' (abc:1) (bcd: 123test)(cde: ergebnis3)'
In [31]: s1 = s.split(')')
In [32]: s1
Out[32]: [' (abc:1', ' (bcd: 123test', '(cde: ergebnis3', '']
In [33]: s2 = [c.split(':')[1].strip() for c in s1 if c]
In [34]: s2
Out[34]: ['1', '123test', 'ergebnis3']
Ich weiß jetzt das die Informationen die ich Suche immer in einer Zeile stehen, in klammern, hinter einem Doppelpunkt. Ich weiß aber nicht wie viele Blöcke es gibt... Der String ist jetzt völlig aus der Luft gegriffen, aber passt gerade.