Punkt an eine Stringkette joinen

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
Albert
User
Beiträge: 23
Registriert: Montag 29. Oktober 2007, 09:42

Montag 19. Mai 2008, 11:55

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
Zuletzt geändert von Albert am Montag 19. Mai 2008, 13:13, insgesamt 5-mal geändert.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 19. Mai 2008, 12:06

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Albert
User
Beiträge: 23
Registriert: Montag 29. Oktober 2007, 09:42

Montag 19. Mai 2008, 12:39

Hat leider nicht so recht geklappt , jetzt bekomme ich dieses Ergebnis:
"'pydb'"."'1234'.'test'"

Noch ne Idee?
Zuletzt geändert von Albert am Montag 19. Mai 2008, 13:03, insgesamt 1-mal geändert.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Montag 19. Mai 2008, 12:48

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?
Albert
User
Beiträge: 23
Registriert: Montag 29. Oktober 2007, 09:42

Montag 19. Mai 2008, 12:59

Ich Benutzte nur Anführungszeichen oben (Copypastefehler).

Also wenn es mit der `repr`-Anweisungen mache bekomme ich dieses Ergebnis:
"'pydb'"."'1234'.'test'"
Zuletzt geändert von Albert am Montag 19. Mai 2008, 13:13, insgesamt 2-mal geändert.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 19. Mai 2008, 13:07

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)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Montag 19. Mai 2008, 13:07

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.
Albert
User
Beiträge: 23
Registriert: Montag 29. Oktober 2007, 09:42

Montag 19. Mai 2008, 13:22

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)
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 19. Mai 2008, 13:26

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)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Albert
User
Beiträge: 23
Registriert: Montag 29. Oktober 2007, 09:42

Montag 19. Mai 2008, 13:33

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
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 19. Mai 2008, 13:37

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Montag 19. Mai 2008, 13:43

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..
Zuletzt geändert von Trundle am Montag 19. Mai 2008, 13:49, insgesamt 1-mal geändert.
Albert
User
Beiträge: 23
Registriert: Montag 29. Oktober 2007, 09:42

Montag 19. Mai 2008, 13:48

Mit Shp2pgsql kann man sich SQL-Scripte generieren lassen.
OK, ich versuche es jetzt mal mit subprocess.

Grüße
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 19. Mai 2008, 13:53

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten