Попробуйте это.В таких случаях я предпочитаю писать вспомогательную функцию, а не многократно набирать (почти) одну и ту же длинную строку (слишком подверженную ошибкам).Аналогично, если понимание списка становится слишком длинным, я предпочитаю форму цикла.
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"], ...]
.Вы не хотите этого делать.
Я только догадываюсь, но если вы хотите переименовать ваши файлы, добавив «Низкий» в конце имени, затем:
Сначала изменитеуказанная выше функция 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)
И если вы не хотитечтобы переименовать файлы, вам нужно будет уточнить, что вы пытаетесь сделать.