千巷猫影
尝试这个。在这种情况下,我更喜欢编写一个辅助函数而不是重复输入(几乎)相同的长行(太容易出错)。同样,如果列表理解太长,我更喜欢循环形式。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)如果您不想重命名文件,则必须说明您要尝试做什么。