config datei oder liste benutzen

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.
Antworten
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Ich sitze hier gerade an einem kleinen Problem. Ich müßte eine Art .config Datei haben. Die ich mit Python auslesen kann. Die Datei sollte in etwas folgendes Format haben. startzeit, startdatei, enddatei.
Das Programm ( das ich programmieren möchte ), von zeit zu zeit, Verzeichnisse oder auch Dateien weg kopieren. Das würde dann in etwa so, in der .config Datei aussehen, oder sollte so aussehen.

{
12:00:00
/pfad/zur/datei
/copy/zur/datei
}

Jetzt soll natürlich nicht nur ein Verzeichnis, oder Datei in der .config Datei stehen, sondern beliebig viele. Mein Versuch, sah so aus:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import os
import ConfigParser

class config ():
	
	# werte in die config datei schreiben über array
	def setConfig (self, data):
		
		config_file = "itbcopy.config"
		config = ConfigParser.ConfigParser()
		config.add_section ('config')
		config.set ('config', 'startzeit', data [0])
		config.set ('config', 'startdatei', data [1])
		config.set ('config', 'enddatei' , data [2])
		with open(config_file, 'wb') as configfile:
			config.write(configfile)
	
	# werte aus der config datei lesen und array zurück geben
	def getConfig (self):
		config_file = "itbcopy.config"
		data = {}
		config = ConfigParser.RawConfigParser()
		config.read(config_file)
		
		data [0] = config.get ('config', 'startzeit')
		data [1] = config.get ('config', 'startdatei')
		data [2] = config.get ('config', 'enddatei')
		return ( data )

def main ():
	myconfig = config ()
	myconfig.setConfig (["12:00:00", "/home/", "/mnt/sdb1/home.old"])
	print (myconfig.getConfig ())
	print (myconfig.getConfig ())
	
if __name__ == "__main__":
	main ()

Das Problem daran ist, das wenn ich die .config auslese, ich immer nur den ersten Eintrag bekomme und ich nicht weiß, wie ich eine solche Datei sequenzell lesen soll. Daher wollte ich fragen, ob eine solche Routine eigentlich sinnvoll ist, oder das ich es besser in eine Art .csv Datei schreibe. Allerdings darf ich nur Standart imports nehmen von Python 2.5.
Weiß jemand Rat?
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

ich glaube, ich bin dann hier fündig geworden.

http://de.wikibooks.org/wiki/Python_unt ... x:_Dateien
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also evtl. wäre auch ein Blick auf das json-Modul sinnvoll. Die Seite ist übrigens nicht so ganz aktuell. Dateien öffnet man seit Python 2.6 mit "with".
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hyperion hat geschrieben:Also evtl. wäre auch ein Blick auf das json-Modul sinnvoll. Die Seite ist übrigens nicht so ganz aktuell. Dateien öffnet man seit Python 2.6 mit "with".
Ehe das jemand falsch versteht: Dateien öffnet man selbstverständlich weiterhin mit "open". Es bietet sich allerdings an, dieses im Rahmen von "with" auszuführen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

/me hat geschrieben: Ehe das jemand falsch versteht: Dateien öffnet man selbstverständlich weiterhin mit "open". Es bietet sich allerdings an, dieses im Rahmen von "with" auszuführen.
Stimmt. Das war schlecht formuliert von mir, danke Dir :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ConfigParser kann mit verschiedenen Sektionen in der Datei umgehen - du musst diese nur explizit deklarieren. :-)

Beispiel:

bsp.conf:

Code: Alles auswählen

[Datei1]
start= 0800
ende = 1200

[Datei2]
start= 1330
ende = 1400
Dann:

Code: Alles auswählen

>>> import ConfigParser
>>> cfg = ConfigParser.ConfigParser()
>>> cfg.read('bsp.conf')
['bsp.conf']
>>> cfg.get('Datei1','start')
'0800'
>>> cfg.get('Datei1','ende')
'1200'
>>> cfg.get('Datei2','ende')
'1400'
Gruß, noisefloor
Antworten