尝试这个。在这种情况下,我更喜欢编写一个辅助函数,而不是重复输入(几乎)相同的长行(太容易出错)。同样,如果列表理解太长,我更喜欢循环形式。
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
没有目录),这样你就不必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)
而且,如果您不想重命名文件,则必须澄清您要执行的操作。