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
Bestimmten String aus Datei lesen
- noisefloor
- User
- Beiträge: 4253
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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
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
Hast du dir schon mal aus der Standard Library configparser angesehen?
- noisefloor
- User
- Beiträge: 4253
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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
@/me: configparser funktioniert AFAIK nur, wenn in der Datei mindestens ein Section-Header vorhanden ist. Ist keiner da, wird ein MissingSectionHeaderError geworfen.
Gruß, noisefloor
-
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, '')- noisefloor
- User
- Beiträge: 4253
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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
@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
