Verstehe raw_string nicht

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
fuppes
User
Beiträge: 28
Registriert: Dienstag 15. April 2008, 22:33

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?
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.
fuppes
User
Beiträge: 28
Registriert: Dienstag 15. April 2008, 22:33

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.
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.
fuppes
User
Beiträge: 28
Registriert: Dienstag 15. April 2008, 22:33

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:
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.
fuppes
User
Beiträge: 28
Registriert: Dienstag 15. April 2008, 22:33

Ok, danke, dann werde ich mal an diese sache mit Unicode machen.
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

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 ...
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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'
>>> 
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Ja, eben. Das kann er aber wohl nicht benutzen ...
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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