【问题标题】:The system cannot find the path specified os.listdir in python [duplicate]系统在python中找不到指定的路径os.listdir [重复]
【发布时间】:2019-05-09 18:46:49
【问题描述】:
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'

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

为什么会这样?

【问题讨论】:

  • 您在运行 Python 程序时是否在 Training data/LOW 所在的目录中?
  • Python 正在从您正在执行的当前路径中寻找目录'/Training data/Low'
  • 这里的join 是什么?你应该使用os.path.join。如果“培训数据”在“C:/Users/DELL PC/Desktop/Msc Project/MSc project/dataset”中,则应在前面加上完整路径。
  • 您需要注意训练和数据之间的空间。在 unix 中,您需要将“训练数据”放在引号之间。
  • @RishiBansal 在这种情况下,您不需要在 Python 中添加引号。

标签: python listdir


【解决方案1】:

试试这个。在这种情况下,我更喜欢编写一个辅助函数,而不是重复输入(几乎)相同的长行(太容易出错)。同样,如果列表理解太长,我更喜欢循环形式。

import os

def files(path):
    result = []
    for name in os.listdir(path):
        fullname = os.path.join(path, name)
        if os.path.isfile(fullname):
            result.append(name)
    return result

path = 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"], ...]。你不想那样做。

我只是猜测,但如果您想通过在名称末尾附加“Low”来重命名文件,那么:

首先修改上面的函数files,追加fullname(带目录)而不是只追加name不带目录),这样就不用一遍遍地@​​987654331@了。

要重命名文件,请执行以下操作:

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)

如果您不想重命名文件,则必须说明您要执行的操作。

【讨论】:

  • 非常感谢。我尝试使用您的代码,它正在读取文件夹,但我遇到的下一个问题是我进入了制作低文件的循环,因此它一直在附加“低”。文件也是如此,但我永远不会退出第一个循环:for i in lowfiles: lowfiles.append([i, 'Low']) 我现在该怎么办?
  • @vandana 不要在lowfiles 的循环中附加到lowfiles。 Python 确实永远不会阻止这一点。你想做什么?您要重命名文件吗?这里lowfiles 是一个字符串列表,但您要添加的元素是列表(两个字符串)。不是你想要的,不管它是什么。
  • 我有一个 csv 文件并应用了一些特征提取,并希望它以名为 features.csv mypath = 'Training-Data/' csvfile = "Features/features. csv" 以 open(csvfile, "a") 作为输出: writer = csv.writer(output, lineterminator='\n') writer.writerow(names) subfolder = files[counter][1] tag = files[counter] [1] data_path = mypath + 子文件夹 +'/'+files[counter][0]
  • @vandana我不确定我明白。是否要连接多个 csv 文件?在这里,您正在编写的内容会将文件 names 写入 csv 文件。是你想要的吗?
【解决方案2】:

我也遇到了同样的问题,尝试了几种解决方案,直到我得到这个 - 也许你可以删除 for-loop 部分?:

import pandas as pd
import glob

path = r'C:\DRO\DCL_rawdata_files' # use your path
all_files = glob.glob(path + "/*.csv")

li = []
for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多