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