OVH Cloud OVH Cloud

os.chdir

9 réponses
Avatar
Do Re Mi chel La Si Do
Bonsoir !


J'ai un petit problème (Win-XP ; Python 2.4)

1) Ce code marche : os.chdir('C:\\')
2) Celui-là, non : os.chdir(r'C:\') #==> SyntaxError: EOL while
scanning single-quoted string
3) Celui-là, oui : os.chdir(r'C:\ ') #ya 1 espace après le \

Je ne vois pas d'où vient le truc ?


@-salutations
--
Michel Claveau

9 réponses

Avatar
Roger That
Bonsoir !
2) Celui-là, non : os.chdir(r'C:') #==> SyntaxError: EOL while
scanning single-quoted string


"os.chrdir" n'a rien à voir là dedans. Une chaine (même raw !) ne peut
pas se terminer par un nombre impair d'antislash. C'est de la faute au
parser python

http://docs.python.org/ref/strings.html

Dans ce cas, je pense que tu devrais:
- utiliser 'c:' si c'est la racine de ton lecteur
- utiliser r'c:tatatititoto' (sans backslash à la fin) si il s'agit
d'un répertoire

Avatar
Do Re Mi chel La Si Do
Merci.

On en apprend tous les jours. Cette limitation des raw-strings est quand
même gênante à l'usage.
Enfin, on va faire avec...

Par exemple, je pense utiliser des choses du genre : os.chdir(r'C:''')

Encore merci, et bonne journée.

Michel Claveau
Avatar
Sébastien Kirche
Le 25 Apr 2005, Roger That vraute :

"os.chrdir" n'a rien à voir là dedans. Une chaine (même raw !) ne peut
pas se terminer par un nombre impair d'antislash. C'est de la faute au
parser python


D'un autre côté, le délimiteur de path standard dans Python n'est pas /
même sous win ?

Le 25 Apr 2005, Do Re Mi chel La Si Do s'est exprimé ainsi :

Par exemple, je pense utiliser des choses du genre :
os.chdir(r'C:''')


Dans ce cas, en utilisant / au lieu de le problème avec les raw
strings disparaît, non ?

--
Sébastien Kirche

Avatar
sean_mcilroy
"Do Re Mi chel La Si Do" wrote in message news:<426c7d62$0$808$...
Bonsoir !


J'ai un petit problème (Win-XP ; Python 2.4)

1) Ce code marche : os.chdir('C:')
2) Celui-là, non : os.chdir(r'C:') #==> SyntaxError: EOL while
scanning single-quoted string
3) Celui-là, oui : os.chdir(r'C: ') #ya 1 espace après le


<< ' >> et << >> sont des "escape sequences"; alors

'C:' == << C: >>
r'C:' == << C:" >>
r'C: ' == << C: >>

(dans le dernier cas, l'espacement empeche que le "" et le "'"
forment ensemble une escape sequence)

HTH

Avatar
Guillaume Bouchard
Roger That wrote:
- utiliser 'c:' si c'est la racine de ton lecteur


Je dit sans doute une bétise, mais pourquoi ne pas utiliser les outils
de os.path. J'ai pas regarder ce que cela donne sous Win, mais je sais
que je code tous mes script avec os.path.join, os.path.curdir. Il doit
surement y avoir une alternative pour spécifier la racine du disque.

Bien que le module path soit rudement mal fait AMHA (j'ai vu une class
de gestion de path ou 'rep' / 'rep' fait tout tous seul, et c'est
vraiment sympa), je pense qu'il faut l'utiliser dans une but de
standardisation et de portabilitée.

--
Guillaume.

Avatar
Do Re Mi chel La Si Do
Bonsoir !


Je ne suis pas d'accord. Considérez :
print r"ABC'123" # qui donne : ABC'123
Le couple ' n'est donc pas "échappés", dans les raw strings.

Par contre, l'explication de Roger That est juste : c'est marqué dans la
doc, visible par le lien qu'il a donné ("a raw string cannot end in a
single backslash").


@-salutations
--
Michel Claveau
Avatar
Do Re Mi chel La Si Do
Bonsoir !


Le problème vient du fait que l'information vient d'un fichier de
configuration, modifiable par l'utilisateur.
En conséquence, il peut y avoir autre chose que "C:" ; et le problème se
pose de manière similaire en UNC (par exemple Serveurdata). Mais, bon,
,tout ça est maintenant réglé (pour moi).

Quand au module os.path, je suis assez d'accord. Il existe bien un module
glob, mais, bien que fonctionnant sous windows, il est d'abord prévu pour
unix, et à quelques petits problèmes avec windows. Du coup, comme beaucoup
de monde (je suppose), j'ai adapté quelques fonctions ou classes.


@-salutations
--
Michel Claveau
Avatar
sean_mcilroy
c'est vrai. j'avais completement tort. je m'excuse.
Avatar
Do Re Mi chel La Si Do
Re

En fait, vous aviez raison, pour les strings normaux. Les raw strings sont
juste gérés un peu différemment.

Au départ je n'avais pas de tentation spéciale à utiliser les raw strings.
Mais, comme j'appelle souvent Python depuis un langage qui utilise, lui
aussi, "" comme caractère d'échappement, pour un simple "C:toto", je suis
obligé d'utiliser "C:\toto\", qui est un peu lourd...

Bonne journée

Michel Claveau