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

Dav*_* Yi 5 python windows operating-system

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
Run Code Online (Sandbox Code Playgroud)

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

[Error 3] The system cannot find the path specified:
Run Code Online (Sandbox Code Playgroud)

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

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

编辑

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
Run Code Online (Sandbox Code Playgroud)

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

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'
Run Code Online (Sandbox Code Playgroud)

Gau*_*are 6

您必须使用 Windows 机器。错误是由于 os.listdir() 引起的。os.listdir() 没有获得正确的路径。

在第 3 行中,您正在执行 os.path.join("archive",directories)。您应该加入包括驱动器(C: 或 D:) 的完整路径,例如“c:/archive/foo: 或在 Linux 上为“home/root/archive/foo”

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

os.path.join 用法-

在Windows 上,当遇到绝对路径组件(例如,r'\foo')时,驱动器号不会重置。如果某个组件包含驱动器号,则所有先前的组件都会被丢弃,并重置驱动器号。请注意,由于每个驱动器都有一个当前目录,因此 os.path.join("c:", "foo") 表示相对于驱动器 C: (c:foo) 上当前目录的路径,而不是 c:\foo 。

编辑:

您将 list 传递corpus_path[os.path.join][2]第 6 行。这会导致错误!corpus_path用。。。来代替items

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

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
Run Code Online (Sandbox Code Playgroud)

输出:

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']
Run Code Online (Sandbox Code Playgroud)