系统在python中找不到指定的os.listdir路径

dirs= os.listdir('C:/Users/DELL PC/Desktop/Msc Project/MSc project/dataset')

for file in dirs:

    print (file)


lowfiles  = [f for f in os.listdir('Training data/LOW') 

             if os.path.isfile(join('Training data/LOW', f))] 

highfiles = [f for f in os.listdir('Training data/HIGH')

             if os.path.isfile(join('Training data/HIGH', f))]

files = []

我正在运行此代码来创建特征向量,但它显示


FileNotFoundError: [WinError 3] The system cannot find the path specified: 'Training data/LOW'

当我运行前几个代码向我显示目录时,它显示了目录中的所有文件。


为什么会这样?


慕妹3146593
浏览 253回答 2
2回答

千巷猫影

尝试这个。在这种情况下,我更喜欢编写一个辅助函数而不是重复输入(几乎)相同的长行(太容易出错)。同样,如果列表理解太长,我更喜欢循环形式。import osdef files(path):    result = []    for name in os.listdir(path):        fullname = os.path.join(path, name)        if os.path.isfile(fullname):            result.append(name)    return resultpath = r"C:\Users\DELL PC\Desktop\Msc Project\MSc project\dataset"for file in os.listdir(path):    print(file)lowfiles = files(os.path.join(path, r"Training data\LOW"))highfiles = files(os.path.join(path, r"Training data\HIGH"))澄清下面的评论:以下将进入一个无限循环,打印 1, 2, 3, 1, 2, 3, 1, 2, 3 ...a = [1, 2, 3]for i in a:    a.append(i)    print(i)永远不要向正在执行循环的容器添加元素。在这里,您正在尝试执行此操作:for i in lowfiles:    lowfiles.append([i, 'Low'])因此,如果lowfiles最初包含["file1", "file2"],则在第一个循环之后它将是["file1", "file2", ["file1", "Low"]],然后["file1", "file2", ["file1", "Low"], ["file2", "Low"], [["file1", "Low"], "Low"], ...]。你不想那样做。我只是猜测,但您想通过在名称末尾附加“低”来重命名文件,然后:首先修改files上面的函数以追加fullname(有目录)而不是只有name没有目录),这样你就不必os.path.join一次又一次。要重命名文件,请执行以下操作:for fullname in files(os.path.join(path, r"Training data\LOW")):    os.rename(fullname, fullname + "Low")如果您不想更改文件扩展名,则可以执行以下操作:for fullname in files(os.path.join(path, r"Training data\LOW")):    base, ext = fullname.rsplit(".", 1)    os.rename(fullname, base + "Low." + ext)如果您不想重命名文件,则必须说明您要尝试做什么。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python