python - كيفية حذف ملف أو مجلد؟




file-io folder (6)

كيف يمكنني حذف ملف أو مجلد في Python؟


كيف يمكنني حذف ملف أو مجلد في Python؟

بالنسبة إلى Python 3 ، لإزالة الملف والدليل بشكل فردي ، استخدم أساليب كائن pathlib.Path.unlink pathlib.Path.rmdir و pathlib.Path.rmdir Path على التوالي:

from pathlib import Path
dir_path = Path.home() / 'directory' 
file_path = dir_path / 'file'

file_path.unlink() # remove file

dir_path.rmdir()   # remove directory

لاحظ أنه يمكنك أيضًا استخدام المسارات النسبية مع كائنات Path ، ويمكنك التحقق من دليل العمل الحالي الخاص بك مع Path.cwd .

لإزالة الملفات والأدلة الفردية في Python 2 ، راجع القسم المسمى أدناه.

لإزالة دليل يحتوي على محتويات ، استخدم shutil.rmtree ، ولاحظ أن هذا متاح في Python 2 و 3:

from shutil import rmtree

rmtree(dir_path)

برهنة

جديد في Python 3.4 هو كائن Path .

دعونا نستخدم واحدة لإنشاء دليل وملف لإثبات الاستخدام. لاحظ أننا نستخدم / للانضمام إلى أجزاء المسار ، وهذا يعمل على حل المشكلات بين أنظمة التشغيل والمشكلات من استخدام الخطوط المائلة العكسية على Windows (حيث تحتاج إلى مضاعفة الخطوط الخلفية مثل \\ أو استخدام سلاسل raw ، مثل r"foo\bar" ):

from pathlib import Path

# .home() is new in 3.5, otherwise use os.path.expanduser('~')
directory_path = Path.home() / 'directory'
directory_path.mkdir()

file_path = directory_path / 'file'
file_path.touch()

و الأن:

>>> file_path.is_file()
True

الآن دعنا نحذفهم. الملف الأول:

>>> file_path.unlink()     # remove file
>>> file_path.is_file()
False
>>> file_path.exists()
False

يمكننا استخدام globing لإزالة ملفات متعددة - أولاً دعنا ننشئ بعض الملفات لهذا:

>>> (directory_path / 'foo.my').touch()
>>> (directory_path / 'bar.my').touch()

ثم التكرار فقط على النمط العام:

>>> for each_file_path in directory_path.glob('*.my'):
...     print(f'removing {each_file_path}')
...     each_file_path.unlink()
... 
removing ~/directory/foo.my
removing ~/directory/bar.my

الآن ، مما يدل على إزالة الدليل:

>>> directory_path.rmdir() # remove directory
>>> directory_path.is_dir()
False
>>> directory_path.exists()
False

ماذا لو أردنا إزالة دليل وكل شيء فيه؟ في حالة الاستخدام هذه ، استخدم shutil.rmtree

دعونا إعادة إنشاء دليلنا وملفنا:

file_path.parent.mkdir()
file_path.touch()

ولاحظ أن rmdir يفشل إلا إذا كان فارغًا ، وهذا هو السبب في أن rmtree مناسب جدًا:

>>> directory_path.rmdir()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "~/anaconda3/lib/python3.6/pathlib.py", line 1270, in rmdir
    self._accessor.rmdir(self)
  File "~/anaconda3/lib/python3.6/pathlib.py", line 387, in wrapped
    return strfunc(str(pathobj), *args)
OSError: [Errno 39] Directory not empty: '/home/excelsiora/directory'

الآن ، استيراد rmtree وتمرير الدليل إلى funtion:

from shutil import rmtree
rmtree(directory_path)      # remove everything 

ويمكننا رؤية ما تم إزالته بالكامل:

>>> directory_path.exists()
False

بايثون 2

إذا كنت على Python 2 ، فهناك pathlib2 ، والتي يمكن تثبيتها pathlib2 :

$ pip install pathlib2

وبعد ذلك يمكنك اسم المكتبة إلى pathlib

import pathlib2 as pathlib

أو قم باستيراد كائن Path مباشرة (كما هو موضح هنا):

from pathlib2 import Path

إذا كان هذا كثيرًا ، فيمكنك إزالة الملفات باستخدام os.remove أو os.unlink

from os import unlink, remove
from os.path import join, expanduser

remove(join(expanduser('~'), 'directory/file'))

أو

unlink(join(expanduser('~'), 'directory/file'))

ويمكنك إزالة الدلائل مع os.rmdir :

from os import rmdir

rmdir(join(expanduser('~'), 'directory'))

لاحظ أن هناك أيضا os.removedirs - أنه يزيل فقط الدلائل الفارغة بشكل متكرر ، ولكن قد تتناسب مع حالة الاستخدام الخاصة بك.


بناء جملة Python لحذف ملف

import os
os.remove("/tmp/<file_name>.txt")

أو

import os
os.unlink("/tmp/<file_name>.txt")

افضل تمرين:
1. تحقق أولاً مما إذا كان الملف أو المجلد يخرج أم لا ، ثم احذف هذا الملف فقط. ويمكن تحقيق ذلك بطريقتين :
ا. os.path.isfile("/path/to/file")
ب. استخدام exception handling.

مثال على os.path.isfile

#!/usr/bin/python
import os
myfile="/tmp/foo.txt"

## if file exists, delete it ##
if os.path.isfile(myfile):
    os.remove(myfile)
else:    ## Show an error ##
    print("Error: %s file not found" % myfile)

معالجة الاستثناء

#!/usr/bin/python
import os

## get input ##
myfile= raw_input("Enter file name to delete : ")

## try to delete file ##
try:
    os.remove(myfile)
except OSError, e:  ## if failed, report it back to the user ##
    print ("Error: %s - %s." % (e.filename,e.strerror))

RESPECTIVE OUTPUT

Enter file name to delete : demo.txt
Error: demo.txt - No such file or directory.

Enter file name to delete : rrr.txt
Error: rrr.txt - Operation not permitted.

Enter file name to delete : foo.txt 

بناء جملة Python لحذف مجلد

shutil.rmtree()

مثال على shutil.rmtree()

#!/usr/bin/python
import os
import sys
import shutil

# Get dir name
mydir= raw_input("Enter directory name : ")

## Try to remove tree; if failed show an error using try...except on screen
try:
    shutil.rmtree(mydir)
except OSError, e:
    print ("Error: %s - %s." % (e.filename,e.strerror))

shutil.rmtree هي الوظيفة غير المتزامنة ، لذا إذا أردت التحقق عند اكتمالها ، فيمكنك استخدامها أثناء ... حلقة

import os
import shutil

shutil.rmtree(path)

while os.path.exists(path):
  pass

print('done')

استعمال

shutil.rmtree(path[, ignore_errors[, onerror]])

(انظر الوثيقة كاملة على shutil ) و / أو

os.remove

و

os.rmdir

(وثيقة كاملة على os.remove() )


يمكنك استخدام وحدة pathlib (يتطلب Python 3.4+ ، ولكن هناك backports للإصدارات الأقدم على PyPI: pathlib ، pathlib2 ).

لإزالة ملف هناك طريقة unlink :

import pathlib
path = pathlib.Path(name_of_file)
path.unlink()

أو طريقة rmdir لإزالة مجلد فارغ :

import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()







delete-file