Этот вид преобразования на самом деле невероятно неинтуитивный в Java
Возьмем, например, следующую строку: «100.00»
C: простая стандартная библиотечная функция по крайней мере с 1971 года ( Откуда взялось имя `atoi`? )
int i = atoi(decimalstring);
Java: обязательный проход методом двойного (или Float), за которым следует cast
int i = (int)Double.parseDouble(decimalstring);
У Java наверняка есть некоторые странности в рукаве
Обновлен для удаления только файлов и использования метода os.path.join()
, предложенного в комментариях. Если вы также хотите удалить подкаталоги, раскомментируйте оператор elif
.
import os, shutil
folder = '/path/to/folder'
for the_file in os.listdir(folder):
file_path = os.path.join(folder, the_file)
try:
if os.path.isfile(file_path):
os.unlink(file_path)
#elif os.path.isdir(file_path): shutil.rmtree(file_path)
except Exception as e:
print(e)
Это нужно сделать, просто используя модуль OS для составления списка, а затем удалить!
import os
DIR = os.list('Folder')
for i in range(len(DIR)):
os.remove('Folder'+chr(92)+i)
Сработало для меня, любые проблемы, дайте мне знать!
Довольно интуитивный способ сделать это:
import shutil, os
def remove_folder_contents(path):
shutil.rmtree(path)
os.makedirs(path)
remove_folder_contents('/path/to/folder')
Используйте метод ниже, чтобы удалить содержимое каталога, а не сам каталог:
import os
import shutil
def remove_contents(path):
for c in os.listdir(path):
full_path = os.path.join(path, c)
if os.path.isfile(full_path):
os.remove(full_path)
else:
shutil.rmtree(full_path)
Если предположить, что temp_dir
будет удалено, однострочная команда, использующая os
, будет выглядеть следующим образом:
_ = [os.remove(os.path.join(save_dir,i)) for i in os.listdir(temp_dir)]
Примечание. Это всего лишь 1 строка для удаления файлов «Не удаляет каталоги.
Надеюсь, это поможет. Спасибо.
Ответьте за ограниченную, специфическую ситуацию: если вы хотите удалить файлы при сохранении дерева подпапок, вы можете использовать рекурсивный алгоритм:
import os
def recursively_remove_files(f):
if os.path.isfile(f):
os.unlink(f)
elif os.path.isdir(f):
map(recursively_remove_files, [os.path.join(f,fi) for fi in os.listdir(f)])
recursively_remove_files(my_directory)
Может быть, немного не по теме, но я думаю, что многие нашел бы это полезным
Я решил проблему с rmtree
makedirs
, добавив time.sleep()
между:
if os.path.isdir(folder_location):
shutil.rmtree(folder_location)
time.sleep(.5)
os.makedirs(folder_location, 0o777)
Если вы используете систему * nix, почему бы не использовать системную команду?
import os
path = 'folder/to/clean'
os.system('rm -rf %s/*' % path)
Еще одно решение:
import sh
sh.rm(sh.glob('/path/to/folder/*'))
Я использовал для решения проблемы таким образом:
import shutil
import os
shutil.rmtree(dirpath)
os.mkdir(dirpath)
Просто сделай это. Это удалит все файлы внутри каталога, а также из подкаталогов. Без вреда для любой папки / каталога. Хорошо работает на Ubuntu без каких-либо ошибок.
import os
mypath = "my_folder" #Enter your path here
for root, dirs, files in os.walk(mypath):
for file in files:
os.remove(os.path.join(root, file))
Я знаю, что это старая ветка, но я нашел кое-что интересное на официальном сайте python. Просто для того, чтобы поделиться другой идеей удаления всего содержимого в каталоге. Потому что у меня есть некоторые проблемы с авторизацией при использовании shutil.rmtree (), и я не хочу удалять каталог и создавать его заново. Оригинал адреса: http://docs.python.org/2/library/os.html#os.walk . Надеюсь, что это может кому-то помочь.
def emptydir(top):
if(top == '/' or top == "\\"): return
else:
for root, dirs, files in os.walk(top, topdown=False):
for name in files:
os.remove(os.path.join(root, name))
for name in dirs:
os.rmdir(os.path.join(root, name))
Я удивлен, что никто не упомянул о потрясающем pathlib
, чтобы сделать эту работу.
Если вы хотите удалить только файлы в каталоге, это может быть один переводчик
from pathlib import Path
[f.unlink() for f in Path("/path/to/folder").glob("*") if f.is_file()]
Для рекурсивного удаления каталогов вы можете написать что-то вроде этого:
from pathlib import Path
from shutil import rmtree
for path in Path("/path/to/folder").glob("**/*"):
if path.is_file():
path.unlink()
elif path.is_dir():
rmtree(path)
Возможно, вам лучше использовать os.walk()
для этого.
os.listdir()
не отличает файлы от каталогов, и вы быстро столкнетесь с проблемами, пытаясь отсоединить их. Есть хороший пример использования os.walk()
для рекурсивного удаления каталога здесь и подсказок о том, как адаптировать его к вашим обстоятельствам.
import os
import shutil
# Gather directory contents
contents = [os.path.join(target_dir, i) for i in os.listdir(target_dir)]
# Iterate and remove each item in the appropriate manner
[os.remove(i) if os.path.isfile(i) or os.path.islink(i) else shutil.rmtree(i) for i in contents]
В предыдущем комментарии также упоминается использование os.scandir в Python 3.5+. Например:
import os
import shutil
with os.scandir(target_dir) as entries:
for entry in entries:
if entry.is_file() or entry.is_symlink():
os.remove(entry.path)
elif entry.is_dir():
shutil.rmtree(entry.path)
Это пока единственный ответ, который:
Код:
for filename in os.listdir(dirpath):
filepath = os.path.join(dirpath, filename)
try:
shutil.rmtree(filepath)
except OSError:
os.remove(filepath)
Столько другие ответы, это не пытается настроить разрешения, чтобы разрешить удаление файлов / каталогов.
Использование rmtree
и воссоздание папки может работать, но я столкнулся с ошибками при удалении и немедленном воссоздании папок на сетевых дисках.
Предлагаемое решение с использованием Walk не работает, так как использует rmtree
для удаления папок, а затем может попытаться использовать os.unlink
для файлов, которые ранее были в этих папках. Это вызывает ошибку.
Опубликованное решение glob
также попытается удалить непустые папки, что приведет к ошибкам.
Я предлагаю вам использовать:
folder_path = '/path/to/folder'
for file_object in os.listdir(folder_path):
file_object_path = os.path.join(folder_path, file_object)
if os.path.isfile(file_object_path):
os.unlink(file_object_path)
else:
shutil.rmtree(file_object_path)
Расширяя ответ mhawke, это то, что я реализовал. Он удаляет все содержимое папки, но не саму папку. Протестировано на Linux с файлами, папками и символическими ссылками, должно работать и на Windows.
import os
import shutil
for root, dirs, files in os.walk('/path/to/folder'):
for f in files:
os.unlink(os.path.join(root, f))
for d in dirs:
shutil.rmtree(os.path.join(root, d))
Вы можете просто сделать это:
import os
import glob
files = glob.glob('/YOUR/PATH/*')
for f in files:
os.remove(f)
Конечно, вы можете использовать другой фильтр в вашем пути, например: /YOU/PATH/*.txt для удаления всех текстовых файлов в каталоге.
Попробуйте модуль shutil
import shutil
shutil.rmtree('/path/to/folder')
Описание:
shutil.rmtree(path, ignore_errors=False, onerror=None)
Строка документации: рекурсивное удаление дерева каталогов.
Если установлено
ignore_errors
, ошибки игнорируются; в противном случае, если установленоonerror
, оно вызывается для обработки ошибки с аргументами(func, path, exc_info)
, гдеfunc
равноos.listdir
,os.remove
илиos.rmdir
; путь - это аргумент этой функции, который вызвал ее сбой; иexc_info
- кортеж, возвращенныйsys.exc_info()
. Еслиignore_errors
ложно иonerror
равноNone
, возникает исключение.
Важное примечание: Имейте в виду, что shutil.rmtree()
не просто удаляет содержимое целевой папки. Также удаляет саму папку.
Примечания: в случае, если кто-то отказался проголосовать за мой ответ, у меня есть кое-что объяснить здесь. Вот длинное и безобразное, но надежное и эффективное решение. Это решает несколько проблем, которые не были рассмотрены другими ответчиками: Вот код (единственная полезная функция -
shutil.rmtree()
можно использовать для удаления дерева каталогов. Я использовал это много раз в моих собственных проектах. Но вы должны понимать, что сам каталог также будет удален с помощью shutil.rmtree()
. Хотя это может быть приемлемо для некоторых, это неправильный ответ для удаления содержимого папки (без побочных эффектов) . shutil.rmtree()
и восстанавливаете его с помощью os.mkdir()
. И вместо этого вы получите пустой каталог с по умолчанию (унаследованным) владельцем и битами режима. Несмотря на то, что у вас может быть право удалять содержимое и даже каталог, вы не сможете установить первоначальные биты владельца и режима в каталоге (например, вы не являетесь суперпользователем).
shutil.rmtree()
для символической ссылки (которая пройдет os.path.isdir()
проверить, ссылается ли он на каталог; даже результат из os.walk()
также содержит символические связанные каталоги). clear_dir()
): import os
import stat
import shutil
# http://stackoverflow.com/questions/1889597/deleting-directory-in-python
def _remove_readonly(fn, path_, excinfo):
# Handle read-only files and directories
if fn is os.rmdir:
os.chmod(path_, stat.S_IWRITE)
os.rmdir(path_)
elif fn is os.remove:
os.lchmod(path_, stat.S_IWRITE)
os.remove(path_)
def force_remove_file_or_symlink(path_):
try:
os.remove(path_)
except OSError:
os.lchmod(path_, stat.S_IWRITE)
os.remove(path_)
# Code from shutil.rmtree()
def is_regular_dir(path_):
try:
mode = os.lstat(path_).st_mode
except os.error:
mode = 0
return stat.S_ISDIR(mode)
def clear_dir(path_):
if is_regular_dir(path_):
# Given path is a directory, clear its content
for name in os.listdir(path_):
fullpath = os.path.join(path_, name)
if is_regular_dir(fullpath):
shutil.rmtree(fullpath, onerror=_remove_readonly)
else:
force_remove_file_or_symlink(fullpath)
else:
# Given path is a file or a symlink.
# Raise an exception here to avoid accidentally clearing the content
# of a symbolic linked directory.
raise OSError("Cannot call clear_dir() on a symbolic link")
самый легкий способ удалить все файлы в папке/удалять все файлы
import os
files = os.listdir(yourFilePath)
for f in files:
os.remove(yourFilePath + f)
Ну, я думаю, что этот код работает. Это не удалит папку, и можно использовать этот код для удаления файлов, имеющих конкретное расширение.
import os
import glob
files = glob.glob(r'path/*')
for items in files:
os.remove(items)