web-dev-qa-db-fra.com

Python: [Erreur 3] Le système ne trouve pas le chemin spécifié:

import os
Current_Directory = os.getcwd() # Should be ...\archive
CORPUS_PATHS = sorted([os.path.join("archive", directories) for directories in os.listdir(Current_Directory)])
filenames = []
for items in CORPUS_PATHS:
    filenames.append(sorted([os.path.join(CORPUS_PATHS, fn) for fn in os.listdir(items)]))

print filenames

J'exécute ce code à partir d'un fichier appelé archive. Dans archive, il y a plus de dossiers et dans chacun de ces dossiers, il y a un ou plusieurs fichiers texte. Je veux faire une liste qui inclut le chemin d'accès à chacun de ces dossiers. Cependant l'erreur suivante apparaît.

[Error 3] The system cannot find the path specified:

J'ai actuellement le script python où j'ai écrit ce code dans le même dossier que l'archive et cela déclenchera cette erreur. Que dois-je faire pour arrêter cette erreur et obtenir tous les chemins de fichiers.

Je ne suis pas très habitué à utiliser os et je ne l'utilise pas souvent. Je m'excuse donc s'il s'agit d'une question triviale.

Modifier

import os
startpath = "archive"
corpus_path = sorted([os.path.join("archive/", directories) for directories in os.listdir(startpath)])

filenames = []
for items in corpus_path:
    print items
    path = [os.path.join(corpus_path, fn) for fn in os.listdir(items)]
    print path

J'ai donc progressé et maintenant, corpus path est essentiellement une liste contenant tous les dossiers souhaités. Maintenant, tout ce que j'essaie de faire est d'obtenir tous les chemins d'accès aux fichiers texte à l'intérieur de ces dossiers, mais je rencontre toujours des problèmes et je ne sais pas comment mais une erreur telle que

File "C:\Users\David\Anaconda\lib\ntpath.py", line 65, in join
result_drive, result_path = splitdrive(path)

File "C:\Users\David\Anaconda\lib\ntpath.py", line 116, in splitdrive
normp = p.replace(altsep, sep)

AttributeError: 'list' object has no attribute 'replace'
4
David Yi

Vous devez être sur la machine Windows. L'erreur est due à os.listdir (). os.listdir () n'obtient pas le chemin correct.

Et à la ligne 3, vous faites os.path.join ("archive", répertoires). Vous devriez rejoindre le chemin complet incluant le lecteur (C: ou D :) comme "c:/archive/foo: ou sur linux" home/root/archive/foo "

Lire - Python os.path.join sous Windows

os.path.join Utilisation -

Sous Windows, la lettre de lecteur n'est pas réinitialisée lorsqu'un composant de chemin absolu (par exemple, r '\ foo') est rencontré. Si un composant contient une lettre de lecteur, tous les composants précédents sont jetés et la lettre de lecteur est réinitialisée. Notez que puisqu'il existe un répertoire en cours pour chaque lecteur, os.path.join ("c:", "foo") représente un chemin relatif au répertoire en cours sur le lecteur C: (c: foo) et non c:\foo. .

Modifier:

Vous passez la liste corpus_path à [os.path.join][2] à la ligne 6. Cela provoque une erreur! Remplacez corpus_path par items.

J'ai créé un dossier d'archives dans mon lecteur 'D:'. Sous le dossier d'archivage, j'ai créé 3 dossiers foo1, foo2 et foo3. Chaque dossier contient 1 ou 2 fichiers texte. Ensuite, j'ai testé votre code après modification. Le code fonctionne bien. Voici le code:

import os
startpath = "d:archive"
corpus_path = sorted([os.path.join("d:", "archive", directories) for directories in os.listdir(startpath)])

filenames = []
for items in corpus_path:
    print items
    path = [os.path.join(items, fn) for fn in os.listdir(items)]
    print path

sortie:

d:archive\foo1
['d:archive\\foo1\\foo1.txt.txt', 'd:archive\\foo1\\foo11.txt']
d:archive\foo2
['d:archive\\foo2\\foo2.txt.txt']
d:archive\foo3
['d:archive\\foo3\\foo3.txt.txt']
1
Gaurav Vichare