Below code was posted by @JacobVlijm. гve tried to modify it, because I want other folder ямс then the file extensions, and гd like to group file extensions into categories. The code does not work however. Please see for errors (гm just в beginner to Пайтон)
#!/usr/bin/env python3
import os
import subprocess
import shutil
# --------------------------------------------------------
reorg_dir = "/media/ashwin/Work+Entertainment/Untitled Folder"
exclude = ()
remove_emptyfolders = True
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
if name.startswith("."):
extension = ".hidden_files"
elif not "." in name:
extension = ".without_extension"
else:
extension = name[name.rfind("."):]
if not extension in exclude:
if extension==".jpeg" or extension==".jpg" or extension==".JPG" or extension==".png" or extension==".PNG":
new_dir = reorg_dir+"/Pictures"
elif extension==".docx" or extension==".doc" or extension==".pdf" or extension==".xlsx" or extension==".ppt" or extension==".pptx":
new_dir = reorg_dir+"/Documents"
elif extension==".mp3" or extension==".MP3":
new_dir = reorg_dir+"/Songs"
elif extension==".mp4" or extension==".MP4" or extension==".avi" or extension==".AVI":
new_dir = reorg_dir+"/Videos"
elif extension==".db" or extension==".DB":
new_dir = reorg_dir+"/Databases"
elif extension=="*.*":
new_dir = reorg_dir+"/Others"
if not os.path.exists(new_dir):
os.mkdir(new_dir)
n = 1; name_orig = name
while os.path.exists(new_dir+"/"+name):
name = name_orig
n = n+1
newfile = new_dir+"/"+name
shutil.move(subject, newfile)
def cleanup():
filelist = []
for root, dirs, files in os.walk(reorg_dir):
for name in files:
filelist.append(root+"/"+name)
directories = [item[0] for item in os.walk(reorg_dir)]
for dr in directories:
matches = [item for item in filelist if dr in item]
if len(matches) == 0:
try:
shutil.rmtree(dr)
except FileNotFoundError:
pass
if remove_emptyfolders == True:
cleanup()
In this code (posted by @Jacob Vlijm) бve tried to add conditions to the new directories made on the extensions. But бm getting the following ошибка:
File "filemgr.py", line 24
new_dir = reorg_dir+"/Pictures"
^
IndentationError: expected an indented block
Please help я out.
обитайте errors when using python3 program.py:
ashwin@ashwin-X550LD:~/Project$ python filemgr.py
ashwin@ashwin-X550LD:~/Project$ python3 filemgr.py
File "filemgr.py", line 23
if extension==".jpeg" or extension==".jpg" or extension==".JPG" or extension==".png" or extension==".PNG":
^
TabError: inconsistent use of tabs and spaces in indentation
Необходимо добавить identation на той строке и ниже. Python использует identation для идентификации блоков кода и кода ниже, если оператор должен быть identated, так как он принадлежит если блок. Стандарт identation соответственно к PEP8 является 4 пробелами.
Python является чувствительным пробелом, это означает, что необходимо форматировать код правильно; иначе Вы получите ошибки...
После if
блок, необходимо форматировать код, можно использовать Вкладку , чтобы сделать это.
Ваш код должен быть похожим на это:
#!/usr/bin/env python3
import os
import subprocess
import shutil
# --------------------------------------------------------
reorg_dir = "/media/ashwin/Work+Entertainment/Untitled Folder"
exclude = ()
remove_emptyfolders = True
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
if name.startswith("."):
extension = ".hidden_files"
elif not "." in name:
extension = ".without_extension"
else:
extension = name[name.rfind("."):]
if not extension in exclude:
if extension==".jpeg" or extension==".jpg" or extension==".JPG" or extension==".png" or extension==".PNG":
new_dir = reorg_dir+"/Pictures"
elif extension==".docx" or extension==".doc" or extension==".pdf" or extension==".xlsx" or extension==".ppt" or extension==".pptx":
new_dir = reorg_dir+"/Documents"
elif extension==".mp3" or extension==".MP3":
new_dir = reorg_dir+"/Songs"
elif extension==".mp4" or extension==".MP4" or extension==".avi" or extension==".AVI":
new_dir = reorg_dir+"/Videos"
elif extension==".db" or extension==".DB":
new_dir = reorg_dir+"/Databases"
elif extension=="*.*":
new_dir = reorg_dir+"/Others"
if not os.path.exists(new_dir):
os.mkdir(new_dir)
n = 1; name_orig = name
while os.path.exists(new_dir+"/"+name):
name = name_orig
n = n+1
newfile = new_dir+"/"+name
shutil.move(subject, newfile)
def cleanup():
filelist = []
for root, dirs, files in os.walk(reorg_dir):
for name in files:
filelist.append(root+"/"+name)
directories = [item[0] for item in os.walk(reorg_dir)]
for dr in directories:
matches = [item for item in filelist if dr in item]
if len(matches) == 0:
try:
shutil.rmtree(dr)
except FileNotFoundError:
pass
if remove_emptyfolders == True:
cleanup()
Рассмотрение Вашего редактирования, что Вы на самом деле хотите, должно создать папки:
Изображения
Документы
Песни
Видео
База данных
Другие
Вместо папок, названных в честь расширений, как в исходном сценарии.
Первое правило всегда: если Вы делаете то же самое несколько раз, сделайте его функцией. Повторение того же самого является излишне подробным, делает Ваш код трудным поддержать (изменяются), исчерпывающий, чтобы читать и выглядеть ужасным.
Используя функцию, вместо:
if extension==".jpeg" or extension==".jpg" or extension==".JPG" or extension==".png" or extension==".PNG":
new_dir = reorg_dir+"/Pictures"
elif extension==".docx" or extension==".doc" or extension==".pdf" or extension==".xlsx" or extension==".ppt" or extension==".pptx":
new_dir = reorg_dir+"/Documents"
elif extension==".mp3" or extension==".MP3":
new_dir = reorg_dir+"/Songs"
elif extension==".mp4" or extension==".MP4" or extension==".avi" or extension==".AVI":
new_dir = reorg_dir+"/Videos"
elif extension==".db" or extension==".DB":
new_dir = reorg_dir+"/Databases"
elif extension=="*.*":
new_dir = reorg_dir+"/Others"
Можно использовать:
def dir_names(ext):
extensions = [
[["jpeg", "jpg", "png"], "Pictures"],
[["mp4", "avi"], "Videos"],
[["docx", "doc", "pdf", "xlsx", "ppt", "pptx"], "Documents"],
[["mp3"], "Songs"],
[["db"], "Database"],
]
match = [item[1] for item in extensions if ext.lower() in item[0]]
return match[0] if match else "Others"
"Вычислить" целенаправленные имена папок. Впоследствии примените функцию в строке:
extension = dir_names(name[name.rfind(".")+1:]) # edited line
#!/usr/bin/env python3
import os
import subprocess
import shutil
# --------------------------------------------------------
reorg_dir = "/media/ashwin/Work+Entertainment/Untitled Folder"
exclude = () # for example
remove_emptyfolders = True
# ---------------------------------------------------------
def dir_names(ext):
extensions = [
[["jpeg", "jpg", "png"], "Pictures"],
[["mp4", "avi"], "Videos"],
[["docx", "doc", "pdf", "xlsx", "ppt", "pptx"], "Documents"],
[["mp3"], "Songs"],
[["db"], "Database"],
]
match = [item[1] for item in extensions if ext.lower() in item[0]]
return match[0] if match else "Others"
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
if name.startswith("."):
extension = "hidden_files"
elif not "." in name:
extension = "without_extension"
else:
extension = dir_names(name[name.rfind(".")+1:]) # edited line
if not extension in exclude:
new_dir = reorg_dir+"/"+extension
if not os.path.exists(new_dir):
os.mkdir(new_dir)
shutil.move(subject, new_dir+"/"+name)
def cleanup():
filelist = []
for root, dirs, files in os.walk(reorg_dir):
for name in files:
filelist.append(root+"/"+name)
directories = [item[0] for item in os.walk(reorg_dir)]
for dr in directories:
matches = [item for item in filelist if dr in item]
if len(matches) == 0:
try:
shutil.rmtree(dr)
except FileNotFoundError:
pass
if remove_emptyfolders == True:
cleanup()
def dir_names(ext):
extensions = [
[["jpeg", "jpg", "png"], "Pictures"],
[["mp4", "avi"], "Videos"],
[["docx", "doc", "pdf", "xlsx", "ppt", "pptx"], "Documents"],
[["mp3"], "Songs"],
[["db"], "Database"],
]
match = [item[1] for item in extensions if ext.lower() in item[0]]
return match[0] if match else "Others"
extension
список, которого каждый элемент списка существует подсписка ectensions (нижний регистр) и соответствующая папка, в которую требуется переместить его. Others
.Кроме проблемы неэффективного кодирования, предложенный код имеет некоторые другие проблемы, из которых добавление отступа является самым важным. (после того, как if/else
необходимо сделать отступ или использовать строку как:
monkey = animal if 1 == 1 else vegetable
)
В Python добавление отступа важно.
Выполнение python
код, ошибки обычно упоминаются интерпретатором в довольно читаемом формате. Всегда запускайте сообщения ошибки отсчета с вниз вверх.