122 votes

Changement de répertoire dans Google colab (sortir de l'interpréteur python)

J'essaie donc de cloner git et de me connecter à ce répertoire en utilisant Google Collab, mais je n'arrive pas à m'y connecter. Qu'est-ce que je fais de mal ?

!rm -rf SwitchFrequencyAnalysis && git clone https://github.com/ACECentre/SwitchFrequencyAnalysis.git

!cd Analyse de la fréquence de commutation

!ls datalab/ SwitchFrequencyAnalysis/

On s'attendrait à ce qu'il affiche le contenu du répertoire de SwitchFrequencyAnalysis - mais au lieu de cela, il affiche la racine. J'ai l'impression de passer à côté de quelque chose d'évident - Est-ce que cela a quelque chose à voir avec le fait d'être dans l'interpréteur python ? (où est la documentation ??)

Démonstration ici.

3 votes

La réponse de Bob Smith ci-dessous est la bonne, mais si vous êtes curieux de savoir pourquoi l'approche ci-dessus n'a pas fonctionné : le problème est que chacune des ! -s'exécute dans son propre sous-shell, de sorte que la commande !cd démarre un nouveau shell, change les répertoires, et ensuite tue ce shell. Le site !ls puis redémarre dans le répertoire courant. Faire !cd SwitchFrequencyAnalysis && ls aurait fonctionné, mais l'utilisation de la fonction os.chdir est l'approche la plus propre ici.

173voto

Fabian Linzberger Points 531

Utiliser

%cd SwitchFrequencyAnalysis

pour changer le répertoire de travail actuel pour l'environnement du notebook (et pas seulement le sous-shell qui exécute votre commande !).

vous pouvez confirmer que cela a fonctionné avec le pwd comme ceci :

!pwd

plus d'informations sur les magies de jupyter / ipython : http://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-cd

11 votes

Pourquoi cd utilise % alors que pwd utilise ! comme préfixe ?

1 votes

@cloudscomputes Comme mentionné par d'autres commentaires, il y a une différence entre ! y % de sorte que, disons, les commandes qui commencent par ! sont globales et s'exécutent pour l'ensemble du système, tandis que les commandes avec % sont spécifiques à l'environnement actuel (environnement principal vs un environnement virtuel pour le projet actuel). Ainsi, les cd doit être lancé par % pour indiquer au compilateur que nous changeons le répertoire du sous-shell temporaire actuel.

113voto

Simon Seo Points 41

Comme d'autres l'ont souligné, le cd doit commencer par un pourcentage :

%cd SwitchFrequencyAnalysis

Différence entre % y !

Google Colab semble hériter ces syntaxes de Jupyter (qui les hérite d'IPython). Jake VanderPlas explique ce comportement d'IPython aquí . Vous pouvez voir l'extrait ci-dessous.

Si vous jouez avec les commandes shell d'IPython pendant un certain temps, vous pourriez remarquer que vous ne peut pas utiliser !cd pour naviguer dans le système de fichiers :

In [11]: !pwd 
/home/jake/projects/myproject

In [12]: !cd ..

In [13]: !pwd 
/home/jake/projects/myproject 

La raison en est que les commandes shell du bloc-notes sont exécutées dans un sous-shell temporaire. Si vous souhaitez changer le répertoire de travail d'une manière plus durable, vous pouvez utiliser la commande %cd commande magique :

In [14]: %cd ..
/home/jake/projects

Une autre façon de voir les choses : vous avez besoin % parce que le changement de répertoire est pertinent pour l'environnement de l'ordinateur portable actuel mais pas pour l'ensemble de l'exécution du serveur.

En général, il faut utiliser ! si la commande est une commande qui peut être exécutée dans un shell séparé. Utilisez % si la commande doit être exécutée sur un ordinateur portable spécifique.

1 votes

Vous pouvez également utiliser simplement "cd", sans !cd ou %cd. A quoi cela sert-il :) ? Merci !

1 votes

@Erik Comme je peux le voir à travers la pop-up de documentation de google colab, cd est une fonction prédéfinie que l %cd La commande magique y est liée. Lorsque vous tapez le simple cd il apporte la fonction avec des arguments de raccourci spécifiques. Ne pas déclarer d'arguments signifie revenir à la fonction /root répertoire.

45voto

Bob Smith Points 12540

Utilice os.chdir . Voici un exemple complet : https://colab.research.google.com/notebook#fileId=1CSPBdmY0TxU038aKscL8YJ3ELgCiGGju

De manière compacte :

!mkdir abc
!echo "file" > abc/123.txt

import os
os.chdir('abc')

# Now the directory 'abc' is the current working directory.
# and will show 123.txt.
!ls

1 votes

Super ! Alors, est-ce que /content y /root pointe vers le même emplacement de dossier. Je veux dire que j'ai du mal à comprendre comment les commandes de googleColab sont liées au système de fichiers Linux-VM sous-jacent. Puisque soit vous exécutez %cd /content | ls o !ls -la | pwd vous finirez par voir /root/.kaggle qui a été créé en utilisant le jeu de commandes !pip install -U -q kaggle suivi par !mkdir -p ~/.kaggle c'est-à-dire ~/ qui est le répertoire personnel est équivalent à /root & /content sont ceux

31voto

Vishnu Zsf Points 201

Si vous voulez utiliser les fonctions cd ou ls, vous avez besoin d'identifiants appropriés avant les noms de fonctions ( % et ! respectivement) utiliser %cd et !ls pour naviguer

.

!ls    # to find the directory you're in ,
%cd ./samplefolder  #if you wanna go into a folder (say samplefolder)

ou si vous voulez sortir du dossier actuel

%cd ../      

et ensuite naviguer vers le dossier/fichier requis en conséquence

3 votes

Pourriez-vous m'indiquer la source où je peux trouver l'utilisation ci-dessus ? De plus, je cherche à utiliser l'opérateur pipeline | comme nous l'utilisons dans les scripts shell bash, des suggestions à ce sujet ? Par ailleurs, quelle est la différence entre l'utilisation de % o !

25voto

Nikita Bachani Points 311
!pwd
import os
os.chdir('/content/drive/My Drive/Colab Notebooks/Data')
!pwd

voir cette réponse pour une explication détaillée https://stackoverflow.com/a/61636734/11535267

1 votes

J'ajouterai également que vous devez d'abord monter Google Drive dans Colab et accorder l'autorisation Google Drive File Stream.

0 votes

Vous m'avez sauvé la vie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X