Seite 1 von 1

Bestimmten String aus Datei lesen

Verfasst: Montag 14. September 2015, 07:30
von Kaito90
Hallo,

ich versuche gerade einen String aus einder Datei zu lesen, jedoch klappt das nicht immer.

In der Datei stehen einige Config::

pfad=c:\bla
nummer=01234567
nummera=07654321

Wenn ich mit Hilfe von regulären Ausdrücken arbeite, zeigt dieser mir die Zahl von nummer= an, wenn diese nicht vorhanden ist nummera. Ich möchte jedoch nur die Zahl von nummera haben. Die Namen in der Datei sind schon vorgegeben. Kann ich irgendwie sagen, suche nur nach nummera und gebe das nach dem = aus?

Vielen Dank
Kaito90

Re: Bestimmten String aus Datei lesen

Verfasst: Montag 14. September 2015, 08:05
von noisefloor
Hallo,

wenn die Datei wirklich so aussieht, also ein Parameter pro Zeile, dann geht das mit startswith().

Also du iterierst über die Zeilen der Datei und prüfst, ob die Zeile mit `nummera` anfängt. Wenn ja splittest du bei `=` und dann hast du auch schon den Wert von `nummera`.

Falls du einen Einfluss auf die Dateistruktur haben solltest wäre es besser, wenn die Datei eine reguläre INI-Datei wäre, dann könntest du das configparser-Modul nutzen.

Gruß, noisefloor

Re: Bestimmten String aus Datei lesen

Verfasst: Montag 14. September 2015, 10:24
von /me
Hast du dir schon mal aus der Standard Library configparser angesehen?

Re: Bestimmten String aus Datei lesen

Verfasst: Montag 14. September 2015, 10:52
von Kaito90
Ich danke schon mal für die Hilfe. Ich werde das mal mit dem startswith ausprobieren. Den Dateiaufbau und Typ kann ich leider nicht ändern, die werden so vorgegeben.

Re: Bestimmten String aus Datei lesen

Verfasst: Montag 14. September 2015, 11:53
von noisefloor
Hallo,

@/me: configparser funktioniert AFAIK nur, wenn in der Datei mindestens ein Section-Header vorhanden ist. Ist keiner da, wird ein MissingSectionHeaderError geworfen.

Gruß, noisefloor

Re: Bestimmten String aus Datei lesen

Verfasst: Montag 14. September 2015, 12:43
von BlackJack
@noisefloor: Falls die Datei ansonsten dem Format entspricht könnte man so einen Section-Header beim Einlesen ”einschmuggeln” und die `readfp()`-Methode vom Parser verwenden, die erwartet nämlich ein Objekt mit einer `readline()`-Methode:

Code: Alles auswählen

from itertools import chain


class prepend_section(object):

    def __init__(self, config_file, section_name='main'):
        self.lines = chain(['[{0}]\n'.format(section_name)], config_file)

    def readline(self):
        return next(self.lines, '')

Re: Bestimmten String aus Datei lesen

Verfasst: Montag 14. September 2015, 12:55
von noisefloor
Hallo,

@BlackJack: raffiniert... Muss ich später mal live ausprobieren. Die Theorie habe ich jedenfalls verstanden ;-)

`readfp()` heißt übrigens ab Python 3.2 `read_file()`, falls jemand P 3.2 oder neuer einsetzt.

Gruß, noisefloor

Re: Bestimmten String aus Datei lesen

Verfasst: Freitag 18. September 2015, 07:01
von Kaito90
Kam jetzt erst dazu es auszuprobieren und es läuft :)

Vielen Dank.