multiOpen

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
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

dieser code ist total ungetestet, will nur wissen ob dieser loesungsweg der richtige ist um eine art "multiOpen" (von mir aus auch "multiFile" ;-) ) zu implementieren

danke


Code: Alles auswählen


class DummyFile:
	def __init__(self, text):
		self.text = text
	def write(self, text):
		self.text += text
		
	def read(self):
		return self.text
	
	def readlines(self):
		return self.text.splitlines()
	
	

class open:
	def __init__(self, arg, user=None, pwd=None):
		
		self.text = ""
		
		port = None
		if "://" in arg:
			proto, rest = arg.split("://", 1)
			machine, path = rest.split("/", 1)
			if ":" in path:
				z = path.split(":")
				port = z[-1] 
				path = ":".join(z[:-1])
		else:
			proto = "file"
			path = rest
		
		z = path.split("/")
		file = z[-1]
		path = "/".join(z[:-1])
		print [proto, machine, path, file, port]

		
		
		if proto == "file":#==============================FILE
			f = file(path + file)
			def read():
				return f.read()
			def save():
				f.close()
				f = file(path + file)
			def close():
				f.close()
	
		elif proto == "ftp":#=============================FTP
			from ftblib import FTP
			f.cwd(path)
			f = FTP(machine)	
			if user and pwd:
				f.login(user, pwd)
			def read():
				 f.retrbinary("RETR " + file, lambda(text): text)
				 return text
			
			def save():
				f.storbinary(path + file, DummyFile(self.text)) #oder doch 'storlines'?
				return DummyFile.read()
			def close():
				f.close()
			
		
		elif proto == "http":#============================HTTP
			from urllib import urlopen
			def read():
				f = urlopen(arg)
				return f.read()
			def close():
				f.close()
			
			def save():
				raise kaWas, "save not supported for HTTP"#ok, es gibt ne HTTP-put methode aber....
		
		self.save = save
		self.read = read
		self.close = close
		
	def __del__(self):
		self.close()
		
			
		
f = open("http://www.google.de/test/foo.html")
print f.read()
Zuletzt geändert von Costi am Mittwoch 31. Januar 2007, 18:22, insgesamt 1-mal geändert.
cp != mv
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Nutzte doch statt deiner eigenen DummyFile Klasse, einfach StringIO ;)

btw. kannst du bitte etwas aussagekräftigere Titel verwenden!

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Nutzte doch statt deiner eigenen DummyFile Klasse, einfach StringIO ;)
Die Inlinekommentare kannst du dir bei der Gelegenheit auch abgewöhnen.

MultiOpen implementiert man auf keinen Fall so, dass man open überschreibt. Ich würde vermutlich einfach von StringIO erben und dann es meinen Bedürfnissen nach erweitern.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Costi hat geschrieben:

Code: Alles auswählen

		elif proto == "ftp":#=============================FTP
			from ftblib import FTP
...
		elif proto == "http":#============================HTTP
			from urllib import urlopen
urllib kann auch ftp:// URLs öffnen.
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

ich bedanke mich recht herzlich und fange dan mal an zu schrieben...

cu
cp != mv
Antworten