Seite 1 von 1
Punkt an eine Stringkette joinen
Verfasst: Montag 19. Mai 2008, 11:55
von Albert
Hallo,
Wenn ich ein Punkt an eine Stringkette joinen, bekomme ich immer dieses Ergebnis:
"pydb"."1234.test"
Es soll aber eigentlich so aussehen.
pydb."1234“.test
Was mache ich falsch?
Code: Alles auswählen
DatabaseName = "pydb"
verfahrensnummer= "1234"
TableName = "Test"
stringPkt = "."
newName = stringPkt.join ( (DatabaseName, verfahrensnummer,TableName ) )
Vielen Dank für eure Hilfe
Grüße Albert
Verfasst: Montag 19. Mai 2008, 12:06
von jens
Das sieht alles ein wenig komisch aus.
Wahrscheinlich sind die Anführungszeichen schon im String drin. Mach doch mal:
Code: Alles auswählen
print repr(DatabaseName)
print repr(verfahrensnummer)
print repr(tableName)
Ich würde das vielleicht ehr so machen:
Code: Alles auswählen
newName = '%s."%s".%s' % (DatabaseName, verfahrensnummer ,tableName)
IMHO ein sehr ungewöhnlicher "pfad" zu Tabelle...
Verfasst: Montag 19. Mai 2008, 12:39
von Albert
Hat leider nicht so recht geklappt , jetzt bekomme ich dieses Ergebnis:
"'pydb'"."'1234'.'test'"
Noch ne Idee?
Verfasst: Montag 19. Mai 2008, 12:48
von Y0Gi
Benutzt du in deinem Code wirklich unterschiedliche Anführungszeichen (oben, unten) als Delimiter anstelle der einfachen Anführungszeichen (<Umschalt + 2> auf deutschem Tastaturlayout)? Vielleicht hängt es damit zusammen?
Und wie lautet die Ausgabe der `repr`-Anweisungen, die Jens aufgezeigt hat?
Verfasst: Montag 19. Mai 2008, 12:59
von Albert
Ich Benutzte nur Anführungszeichen oben (Copypastefehler).
Also wenn es mit der `repr`-Anweisungen mache bekomme ich dieses Ergebnis:
"'pydb'"."'1234'.'test'"
Verfasst: Montag 19. Mai 2008, 13:07
von jens
Albert hat geschrieben:Also wenn es mit der `repr`-Anweisungen mache bekomme ich dieses Ergebnis:
"'pydb'"."'1234'.'test'"
Das kann aber nicht die Ausgabe von dem sein:
Code: Alles auswählen
print repr(DatabaseName)
print repr(verfahrensnummer)
print repr(tableName)
Verfasst: Montag 19. Mai 2008, 13:07
von shakebox
ich verstehe das Problem noch nicht so ganz. Aus dem was Du oben als Beispiel bringst kann doch nie das Ergebnis rauskommen das Du auffuehrst. Erstens stimmen die Variablen-Namen ja nicht, zweitens versteh ich nicht wo die zusaetzlichen Anfuehrungszeichen herkommen sollen im Output.
Wenn ich folgendes eingebe:
Code: Alles auswählen
test1 = 'xyz'
test2 = 'abc'
test3 = '123'
trenner = '.'
print trenner.join((test1, test2, test3))
kommt als Ergebnis raus: xyz.abc.123
Versteh ich da jetzt was falsch? Kannst Du einfach nochmal nen Ausgangscode liefern der direkt ausfuehrbar ist und das Deiner Meinung nach falsche Verhalten direkt ausspuckt? Wenn Beispiel und Output nicht zusammenpassen wird es schwierig.
Verfasst: Montag 19. Mai 2008, 13:22
von Albert
Sorry Jens, die Ausgabe ist:
'pydb'
'1234'
'test'
Ich Poste mal meinen ganzen Code, vielleicht mache den Fehler an einer anderen stelle.
Code: Alles auswählen
import os
DatabaseName = "pydb"
Schema = "1234"
TableName = "Test"
stringPkt = "."
def createSqlStat(shapePath, tableName, zielVerzeichnis, Schema):
newName = '%s."%s".%s' % (repr(DatabaseName), repr(Schema) ,repr(tableName))
print newName
#stringPkt = "."
#newName = stringPkt.join ( (DatabaseName, verfahrensnummer ,tableName) )
#print newtableName
command="C:\\Programme\\PostgreSQL\\bin\\Shp2pgsql -s 31467 " + shapePath + " " + newName+ " > " + zielVerzeichnis
os.system(command)
createSqlStat("C:\\shape\\bp_gruenland.shp", "test", "C:\\shape\\gruenland.sql", Schema)
Verfasst: Montag 19. Mai 2008, 13:26
von jens
Albert hat geschrieben:Sorry Jens, die Ausgabe ist:
'pydb'
'1234'
'test'
Aha, da kommen wir der Sache doch schon näher... Also du hast normale Strings vorliegen. In denen gibt es keine Ausrufezeichen oder sonstiges...
Albert hat geschrieben:Code: Alles auswählen
newName = '%s."%s".%s' % (repr(DatabaseName), repr(Schema) ,repr(tableName))
Das ist natürlich so nicht gemeint gewesen. repr() war nur zum testen da. So geht's, wie ich schon geschrieben hatte:
Code: Alles auswählen
newName = '%s."%s".%s' % (DatabaseName, Schema, tableName)
Verfasst: Montag 19. Mai 2008, 13:33
von Albert
In meiner print-Ausgabe ist es jetzt richtig, nur leider nicht in meiner Datei. Aber das liegt wohl an dem Programm(Shp2pgsql) was ich aufrufe. Da ist es immer noch Falsch.
Aber vielen Dank für euere Hilfe
Grüße Albert
Verfasst: Montag 19. Mai 2008, 13:37
von jens
Ach jetzt sehe ich gerade das hier:
Albert hat geschrieben: command="C:\\Programme\\PostgreSQL\\bin\\Shp2pgsql -s 31467 " + shapePath + " " + newName+ " > " + zielVerzeichnis
os.system(command)[/code]
Was ist denn Shp2pgsql für ein Programm? Kannst du nicht direkt auf die PostgreSQL Daten zugreifen?
Ich denke du hast da eine Menge DoubleQuote Probleme. Vielleicht hilft da subprocess weiter: [wiki]Neue Features#Subprocess[/wiki]
Dort kannst du Parameter als Liste übergeben und must somit nicht alles als String überreichen...
Verfasst: Montag 19. Mai 2008, 13:43
von Trundle
Und falls unbedingt mit "Shp2pgsql", warum nicht mit [mod]subprocess[/mod]?
Edit: Okay, das hat jens schon geschrieben. Diese Woche ist einfach nicht so meine Woche..
Verfasst: Montag 19. Mai 2008, 13:48
von Albert
Mit Shp2pgsql kann man sich SQL-Scripte generieren lassen.
OK, ich versuche es jetzt mal mit subprocess.
Grüße
Verfasst: Montag 19. Mai 2008, 13:53
von jens
Albert hat geschrieben:Mit Shp2pgsql kann man sich SQL-Scripte generieren lassen.
Ich kenne Shp2pgsql nicht, aber das hört sich für mich so an, als wenn du ein ORM möchtest:
http://de.wikipedia.org/wiki/Object-Relational_Mapping
Stichwörter: SQLAlchemy, Elixir