关于Windows:Python:[错误3]系统找不到指定的路径:

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

1
2
3
4
5
6
7
8
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

我正在从一个名为archive的文件运行此代码,并且在archive中有更多文件夹,并且在每个这些文件夹中都有一个或多个文本文件。我要创建一个列表,其中包含每个这些文件夹的路径。但是,出现以下错误。

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

我目前有python脚本,我在其中与归档文件所在的文件夹中编写了此代码,它将触发此错误。我应该怎么做才能停止此错误并获取所有文件路径。

我不擅长使用os,而且我不经常使用它,因此,如果这是一个琐碎的问题,我深表歉意。

编辑

1
2
3
4
5
6
7
8
9
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

所以我已经取得了一些进展,现在我的语料库路径本质上是一个包含所有所需文件夹路径的列表。现在,我要做的就是获取这些文件夹中文本文件的所有路径,但我仍然遇到问题,我不知道如何解决,但是出现诸如

之类的错误

1
2
3
4
5
6
7
8
9
File"C:\\Users\\David\\Anaconda\\lib\
tpath.py"
, line 65, in join
result_drive, result_path = splitdrive(path)

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

AttributeError: 'list' object has no attribute 'replace'


您必须在Windows计算机上。错误是由于os.listdir()引起的。 os.listdir()没有获得正确的路径。

在第3行中,您正在执行os.path.join(" archive",directorys)。
您应该加入完整的路径,包括驱动器(C:或D :),例如" c:/ archive / foo:或在Linux上
"主目录/根目录/存档/ foo"

阅读-Windows上的Python os.path.join

os.path.join用法-

On Windows, the drive letter is not reset when an absolute path
component (e.g., r'\\foo') is encountered. If a component contains a
drive letter, all previous components are thrown away and the drive
letter is reset. Note that since there is a current directory for each
drive, os.path.join("c:","foo") represents a path relative to the
current directory on drive C: (c:foo), not c:\\foo.

编辑:

您在第6行中将列表corpus_path传递给[os.path.join][2]。这会导致错误!将corpus_path替换为items

我在" D:"驱动器中创建了存档文件夹。在存档文件夹下,我创建了3个文件夹foo1,foo2和foo3。每个文件夹包含1或2个文本文件。然后,我在修改后测试了您的代码。代码工作正常。
这是代码:

1
2
3
4
5
6
7
8
9
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

输出:

1
2
3
4
5
6
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']