Seite 1 von 1

Verstehe raw_string nicht

Verfasst: Donnerstag 1. Mai 2008, 21:32
von fuppes
Hi,

also irgendwie verstehe ich das net mit den string und den sonderzeichen nicht, also ich versuche ne datei zu verschiebe:

def move_to(a_file, target):
r_dir = a_file.encode('string-escape')
r_target = target.encode('string-escape')

shutil.move(a_file, target)

Aber irgendwie geht das mit dem encoder doch nicht. Denn ohne encoder:
C:\Usersupp\Desktopib.naps.cas_ROI\pom.xml
Und dann mit (b.encode('string-escape')
C:\\Users\x0cupp\\Desktop\x07ib.naps.cas_ROI\\pom.xml

Also das mit r (r "lbblblbl\blakjkjdalkj") hab ich schon gesehen, aber gibts das denn nicht auch fuer variablen?? also eine string_var in eine raw_string_var umwandeln?

Verfasst: Donnerstag 1. Mai 2008, 22:35
von BlackJack
Nein das gibt's nicht weil es das gar nicht geben kann. "raw" Zeichenketten sind nur eine Möglichkeit literale Zeichenketten in *Quelltext* ein zu geben. Im Programm selbst gibt es nur eine Art von Zeichenketten, denen man nicht mehr ansehen kann, ob sie mal eine "normale" oder eine "raw" Zeichenkette im Quelltext war.

Wo kommen die Zeichen- oder besser Byteketten denn her? Da sind Steuerzeichen drin, die *ziemlich* ungewöhnlich für Dateinamen sind, zum Beispiel '\x07' ist der ASCII-Code für die "Klingel" -- beim Computer im Terminal in der Regel durch ein Piepsen umgesetzt.

Verfasst: Donnerstag 1. Mai 2008, 22:45
von fuppes
Hi,

also meine path sieht so aus:
"C:\Users\fupp\Desktop\aib.naps.cas_ROI"

wenn ich zb folgendes versuche, gehts net:
chdir("C:\Users\fupp\Desktop\aib.naps.cas_ROI")

Wenn ich dann aber
chdir(r"C:\Users\thul\Desktop\aib.naps.cas_ROI")

verwenden gehts.

Die sach ist nunmal die das ich den path von nem andern program bekomme also r nicht verwenden kann.

Verfasst: Donnerstag 1. Mai 2008, 22:58
von BlackJack
Wie schon gesagt, das 'r' vor Zeichenketten ist nur interessant wenn Du das vor literalen Zeichenketten in Deinem Quelltext schreibst. Wenn die Daten erst einmal im laufenden Programm sind, dann gibt es diese Unterscheidung nicht mehr.

Es sieht also so aus, als wenn Du von dem anderen Programm schon kaputte Pfadangaben bekommst. Das sollte man also *dort* reparieren.

Verfasst: Donnerstag 1. Mai 2008, 23:06
von fuppes
Ok, damit ich das auch richtig verstanden habe, wenn ich mal soweit bin und dem user nen dialogbox (Python) anbiete in die er dann nen path eingeben kann und ich dann diesen Path aus der Textbox auslese und an folgend funktion übergeben würde, würde das funktionieren!??!?

Code: Alles auswählen

from os import *
import shutil

def move_to(a_file, target):
    right_dir = a_file.encode('string-escape')
    right_target = target.encode('string-escape')
    
    shutil.move(a_file, target)
*bitte sag ja* :lol:

Verfasst: Donnerstag 1. Mai 2008, 23:43
von BlackJack
Das kommt auf die Definition von "funktionieren" an. Ich würde aber mal *nein* sagen, weil solche Pfadangaben wohl nicht als normal anzusehen sind. Statt 'string-escape' solltest Du vielleicht besser eine Kodierung nehmen, die vom System auch *wirklich* für Dateinamen verwendet wird. Schau Dir mal `sys.getfilesystemencoding()` an.

Und dann lerne unbedingt was es mit Unicode und Kodierungen auf sich hat.

Verfasst: Sonntag 4. Mai 2008, 15:59
von fuppes
Ok, danke, dann werde ich mal an diese sache mit Unicode machen.

Verfasst: Sonntag 4. Mai 2008, 16:29
von Jan-Peer
fuppes hat geschrieben:Hi,

also meine path sieht so aus:
"C:\Users\fupp\Desktop\aib.naps.cas_ROI"

wenn ich zb folgendes versuche, gehts net:
chdir("C:\Users\fupp\Desktop\aib.naps.cas_ROI")

Wenn ich dann aber
chdir(r"C:\Users\thul\Desktop\aib.naps.cas_ROI")

verwenden gehts.

Die sach ist nunmal die das ich den path von nem andern program bekomme also r nicht verwenden kann.
Für mich sieht das so aus, daß eine Verdopplung der "" dich weiterbringen könnte. Aber vielleicht bin ich jetzt auch völlig auf dem falschen Dampfer ...

Verfasst: Montag 5. Mai 2008, 12:06
von EyDu
Jan-Peer hat geschrieben:Für mich sieht das so aus, daß eine Verdopplung der "" dich weiterbringen könnte. Aber vielleicht bin ich jetzt auch völlig auf dem falschen Dampfer ...
Dafür sorgt das "r":

Code: Alles auswählen

>>> r"Mein\Pfad"
'Mein\\Pfad'
>>> r"Mein\nString"
'Mein\\nString'
>>> "Mein\\Pfad"
'Mein\\Pfad'
>>> "Mein\nString"
'Mein\nString'
>>> 

Verfasst: Montag 5. Mai 2008, 12:48
von Jan-Peer
Ja, eben. Das kann er aber wohl nicht benutzen ...

Verfasst: Montag 5. Mai 2008, 14:32
von Zap
... er kann kein r benutzen und er kann auch keine "Verdoppelung" benutzen, da er allem anschein nach von irgendwoher einen String übergeben bekommt der, wie Blackjack schon sagte, kaputt ist. Das Problem muss also "dort" gelöst werden.