Форум сайта python.su
857
Nikfelпроверил у себя - то же самое
Выдаёт отказано в доступе.
Nikfelда, это непонятно что
и там нет доступа к некоторым папкам или это даже не папки, а ярлыки
Офлайн
0
Написал таким образом:
# coding: cp1251 import os, fnmatch, ctypes from os import listdir from os.path import isfile from os.path import join as joinpath SHERB_NOCONFIRMATION = 1 SHERB_NOPROGRESSUI = 2 SHERB_NOSOUND = 4 def EmptyRecycleBin(options=SHERB_NOCONFIRMATION or SHERB_NOPROGRESSUI or SHERB_NOSOUND): ctypes.windll.shell32.SHEmptyRecycleBinA(None, None, options) fil = open('error_Delete.log', 'w') def ClearFolder(Path): for root, dirs, files in os.walk(Path): for name in files: strName = os.path.join(root, name) if isfile(strName) : try: if os.path.exists(strName) : print ('Удаление : ' + strName) os.remove(strName) except PermissionError: fil.write(strName + '\n') continue def DelFilesToMask(Path): a = ["*.diz", "*.tmp", "*.temp", "*.chk", "*.old", "*.gid", "*.nch", "*.wbk", "*.fts", "*.ftg", "*.$$$", "*log.txt", "*.err", "*.---", "*.~*", "~*.*", "*.??$", "*.___", "*.log", "*.~mp", "*._mp", "*.dmp", "*.prv", "*.sik", "*.bak", "thumbs.db", "CHKLIST.MS", "*.ilk", "*.aps", "*.ncb", "*.pch", "*.$db", "*.?$?", "*.??~", "*.?~?", "*.db$", "*.^", "*._dd", "*._detmp", "chklist.*", "mscreate.dir", "log*.txt", "*.log?"] for root, dirs, files in os.walk(Path): for name in files: strName = os.path.join(root, name) for i in a: if fnmatch.fnmatch(os.path.basename(strName), i): try: if os.path.exists(strName) : print ('Удаление : ' + strName) os.remove(strName) except PermissionError: fil.write(strName + '\n') continue def main(): tmp = os.path.expandvars('%TEMP%') temp = os.path.expandvars('%SystemRoot%\TEMP') print("Очистка \n\n" + tmp + '\n') ClearFolder(tmp) print('\n' + temp + '\n') ClearFolder(temp) print("\nОчистка корзины \n") EmptyRecycleBin(options=SHERB_NOCONFIRMATION) print("Очистка файлов на диске C: \n") DelFilesToMask('c:\\') print("Завершено") fil.close() if __name__ == '__main__': main()
Офлайн
31
недавно боролся с отказом в доступе
http://python.su/forum/topic/22988/?page=2
копировать можно, удалять нет
Отредактировано sanodin (Янв. 23, 2014 08:18:54)
Офлайн
857
Nikfeltry … except … - медленная конструкция, поэтому лучше через проверки делать
Не достаток в медлительности процесса
Nikfelпо скорости разработки питон быстрее
По нормальному похоже код можно написать только в c++ или в делфи
Офлайн
221
Nikfelя по нормальному пишу на Питоне. А если вы хотите сказать о быстродействии, то компилируемые языки быстрее интепретируемых - это милион раз не новость, а ассемблер вероятнее еще быстрее чем с/с++.
По нормальному похоже код можно написать только в c++ или в делфи и других языках программирования.
py.user.next+1. Nikfel
у тебя, к примеру, если файл не может быть удалён, продолжают проверяться остальные маски для него
и проверяется существование файла, когда он и так найден как существующий
Офлайн
221
py.user.nextна самом деле зависит от ситуации (входных данных). У меня был случай когда эта конструкция работала ощутимо быстрее нежели проверки. Речь там шла о переводе строки в целочисленное целое большого числа строк. try ..except вышло по времени выгоднее чем str.isdigit(). Но опять таки - все зависит от входных данных, в ином случае картина может быть диаметрально противоположной.
try … except … - медленная конструкция, поэтому лучше через проверки делать
Офлайн
36
NikfelВам правильно сказали
Не достаток в медлительности процесса, но зато работает
py.user.nextПопробуйте так:
тебе надо подтянуть алгоритмизацию
import fnmatch import os import re def delete_files_by_mask(root, masks): root = os.path.abspath(root) pattern = re.compile("|".join(map(fnmatch.translate, masks)), re.I).match for path, dirs, files in os.walk(root): for name in filter(pattern, files): try: filename = os.path.join(path, name) os.remove(os.path.join(path, filename)) except OSError as e: print("{}: {}".format(e.strerror, filename)) masks = ["*.diz", "*.tmp", "*.temp", "*.chk", "*.old", "*.gid", "*.nch", "*.wbk", "*.fts", "*.ftg", "*.$$$", "*log.txt", "*.err", "*.---", "*.~*", "~*.*", "*.??$", "*.___", "*.log", "*.~mp", "*._mp", "*.dmp", "*.prv", "*.sik", "*.bak", "thumbs.db", "CHKLIST.MS", "*.ilk", "*.aps", "*.ncb", "*.pch", "*.$db", "*.?$?", "*.??~", "*.?~?", "*.db$", "*.^", "*._dd", "*._detmp", "chklist.*", "mscreate.dir", "log*.txt", "*.log?"] delete_files_by_mask(r"c:\", masks)
Офлайн
31
http://technet.microsoft.com/ru-ru/sysinternals/bb897556
можете проделать подобное на python
подобным образом и анлокер действует если не может убить процесс пользующий файл
P.S. все равно надо аккуратней с удалением системных файлов, исключить директории, которые нежелательно трогать, например удаление этого файла c:\Boot\BCD.LOG, может вызвать при следующей загрузке, проблемы
import win32api import win32con #win32file.MoveFileEx("test.txt", "test2.txt" , win32file.MOVEFILE_DELAY_UNTIL_REBOOT)#переименование win32api.MoveFileEx("C:\\san.txt", None, win32con.MOVEFILE_DELAY_UNTIL_REBOOT)#удаление
Отредактировано sanodin (Янв. 23, 2014 14:13:22)
Офлайн
0
py.user.nextС этим согласен. Просто я не давно начал изучать питон самостоятельно и внимательности не хватает. Мне больше нравится язык Delphi и C++.
тебе надо подтянуть алгоритмизацию
JOHN_16Со всеми основами языка питон я ещё не разобрался для этого. Подозреваю что скорость моего кода мала из-за того что много циклов использую, наверно можно найти способ проще, но для этого нужно глубже изучить питон.
если вас не устраивает скорость работы вашего кода, то вам нужно делать профилирование, для выявления “узких” мест. И далее оптимизировать код.
Офлайн
58
А мне очень не нравится делфи. Сам на нем долгое время работал. Вспоминаю с ужасом эти деньки 
Офлайн