Làm thế nào tôi có thể xóa nội dung của một thư mục cục bộ trong Python?
Dự án hiện tại là dành cho Windows, nhưng tôi cũng muốn xem *nix.
Martineau
Huy hiệu vàng 116K2525 gold badges161 silver badges288 bronze badges
Đã hỏi ngày 9 tháng 10 năm 2008 lúc 4:22Oct 9, 2008 at 4:22
UNKWNTECHUNKWNTECHUnkwnTech
85,7K65 Huy hiệu vàng183 Huy hiệu bạc228 Huy hiệu Đồng65 gold badges183 silver badges228 bronze badges
4
import os, shutil
folder = '/path/to/folder'
for filename in os.listdir[folder]:
file_path = os.path.join[folder, filename]
try:
if os.path.isfile[file_path] or os.path.islink[file_path]:
os.unlink[file_path]
elif os.path.isdir[file_path]:
shutil.rmtree[file_path]
except Exception as e:
print['Failed to delete %s. Reason: %s' % [file_path, e]]
Mark Amery
134K78 Huy hiệu vàng395 Huy hiệu bạc444 Huy hiệu đồng78 gold badges395 silver badges444 bronze badges
Đã trả lời ngày 9 tháng 10 năm 2008 lúc 4:27Oct 9, 2008 at 4:27
Nick Stinematesnick StinematesNick Stinemates
40K21 Huy hiệu vàng59 Huy hiệu bạc60 Huy hiệu đồng21 gold badges59 silver badges60 bronze badges
4
Bạn có thể chỉ cần làm điều này:
import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
Tất nhiên bạn có thể sử dụng một bộ lọc khác trong đường dẫn của bạn, ví dụ: /you/path/*.txt để xóa tất cả các tệp văn bản trong một thư mục.
John Smith
7.1036 Huy hiệu vàng48 Huy hiệu bạc61 Huy hiệu Đồng6 gold badges48 silver badges61 bronze badges
Đã trả lời ngày 22 tháng 4 năm 2011 lúc 15:23Apr 22, 2011 at 15:23
BlueiceFieldBlueiceFieldBlueicefield
4.9591 Huy hiệu vàng15 Huy hiệu bạc8 Huy hiệu đồng1 gold badge15 silver badges8 bronze badges
7
Bạn có thể xóa chính thư mục, cũng như tất cả các nội dung của nó, bằng cách sử dụng
import shutil
shutil.rmtree['/path/to/folder']
9:import shutil
shutil.rmtree['/path/to/folder']
0import 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]]
Xóa toàn bộ cây thư mục; Đường dẫn phải trỏ đến một thư mục [nhưng không phải là một liên kết tượng trưng đến một thư mục]. Nếu bỏ qua_errors là đúng, các lỗi do loại bỏ không thành công sẽ bị bỏ qua; Nếu sai hoặc bị bỏ qua, các lỗi như vậy được xử lý bằng cách gọi một trình xử lý được chỉ định bởi Onerror hoặc, nếu điều đó bị bỏ qua, chúng sẽ tăng một ngoại lệ.
Mark Amery
134K78 Huy hiệu vàng395 Huy hiệu bạc444 Huy hiệu đồng78 gold badges395 silver badges444 bronze badges
Đã trả lời ngày 9 tháng 10 năm 2008 lúc 4:27Oct 9, 2008 at 7:18
11
Nick Stinematesnick Stinemates
40K21 Huy hiệu vàng59 Huy hiệu bạc60 Huy hiệu đồngBạn có thể chỉ cần làm điều này:Jul 2, 2009 at 9:25
Tất nhiên bạn có thể sử dụng một bộ lọc khác trong đường dẫn của bạn, ví dụ: /you/path/*.txt để xóa tất cả các tệp văn bản trong một thư mục.Iker Jimenez
John Smith9 gold badges47 silver badges46 bronze badges
4
7.1036 Huy hiệu vàng48 Huy hiệu bạc61 Huy hiệu Đồng
Đã trả lời ngày 22 tháng 4 năm 2011 lúc 15:23
from pathlib import Path
[f.unlink[] for f in Path["/path/to/folder"].glob["*"] if f.is_file[]]
BlueiceFieldBlueiceField
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]
4.9591 Huy hiệu vàng15 Huy hiệu bạc8 Huy hiệu đồngMay 15, 2019 at 14:04
Bạn có thể xóa chính thư mục, cũng như tất cả các nội dung của nó, bằng cách sử dụng
import shutil
shutil.rmtree['/path/to/folder']
9:Husky
02 gold badges44 silver badges40 bronze badgesimport 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]]
2
Xóa toàn bộ cây thư mục; Đường dẫn phải trỏ đến một thư mục [nhưng không phải là một liên kết tượng trưng đến một thư mục]. Nếu bỏ qua_errors là đúng, các lỗi do loại bỏ không thành công sẽ bị bỏ qua; Nếu sai hoặc bị bỏ qua, các lỗi như vậy được xử lý bằng cách gọi một trình xử lý được chỉ định bởi Onerror hoặc, nếu điều đó bị bỏ qua, chúng sẽ tăng một ngoại lệ.
Đã trả lời ngày 9 tháng 10 năm 2008 lúc 7:18
Mở rộng câu trả lời của Mhawke Đây là những gì tôi đã thực hiện. Nó loại bỏ tất cả nội dung của một thư mục nhưng không phải là chính thư mục. Được thử nghiệm trên Linux với các tệp, thư mục và liên kết tượng trưng, cũng sẽ hoạt động trên 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]]
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] or os.path.islink[file_object_path]:
os.unlink[file_object_path]
else:
shutil.rmtree[file_object_path]
Đã trả lời ngày 2 tháng 7 năm 2009 lúc 9:25Jul 7, 2011 at 18:25
Iker Jimeneziker Jimenezjgoeders
6.9859 Huy hiệu vàng47 Huy hiệu bạc46 Huy hiệu đồng18 silver badges24 bronze badges
2
This:
- Tôi ngạc nhiên khi không ai đề cập đến
1 tuyệt vời để thực hiện công việc này.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]]
- Nếu bạn chỉ muốn xóa các tệp trong một thư mục, nó có thể là một oneliner
- Để loại bỏ đệ quy các thư mục, bạn có thể viết một cái gì đó như thế này:
- Đã trả lời ngày 15 tháng 5 năm 2019 lúc 14:04
- Huskyhusky
- 5.5212 Huy hiệu vàng44 Huy hiệu bạc40 Huy hiệu đồng
Code:
for filename in os.listdir[dirpath]:
filepath = os.path.join[dirpath, filename]
try:
shutil.rmtree[filepath]
except OSError:
os.remove[filepath]
Sử dụng
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]]
2 và tái tạo thư mục có thể hoạt động, nhưng tôi đã gặp lỗi khi xóa và ngay lập tức tái tạo các thư mục trên các ổ đĩa mạng.
Mark Amery
134K78 Huy hiệu vàng395 Huy hiệu bạc444 Huy hiệu đồng78 gold badges395 silver badges444 bronze badges
Đã trả lời ngày 9 tháng 10 năm 2008 lúc 4:27Sep 21, 2012 at 8:24
Nick Stinematesnick StinematesJon Chu
40K21 Huy hiệu vàng59 Huy hiệu bạc60 Huy hiệu đồng2 gold badges19 silver badges19 bronze badges
Bạn có thể chỉ cần làm điều này:
import os
import shutil
with os.scandir[target_dir] as entries:
for entry in entries:
if entry.is_dir[] and not entry.is_symlink[]:
shutil.rmtree[entry.path]
else:
os.remove[entry.path]
Tất nhiên bạn có thể sử dụng một bộ lọc khác trong đường dẫn của bạn, ví dụ: /you/path/*.txt để xóa tất cả các tệp văn bản trong một thư mục.
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
[shutil.rmtree[i] if os.path.isdir[i] and not os.path.islink[i] else os.remove[i] for i in contents]
John SmithDec 2, 2012 at 5:51
7.1036 Huy hiệu vàng48 Huy hiệu bạc61 Huy hiệu ĐồngJacob Wan
Đã trả lời ngày 22 tháng 4 năm 2011 lúc 15:2321 silver badges19 bronze badges
0
BlueiceFieldBlueiceField
- 4.9591 Huy hiệu vàng15 Huy hiệu bạc8 Huy hiệu đồng
- Bạn có thể xóa chính thư mục, cũng như tất cả các nội dung của nó, bằng cách sử dụng
9:the directory itself will also be deleted byimport shutil shutil.rmtree['/path/to/folder']
6. While this might be acceptable for some, it's not a valid answer for deleting the contents of a folder [without side effects].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]]
-
0customized owner and mode bits, where there are a lot of contents. Then you delete it withimport 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]]
6 and rebuild it withimport 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]]
9. And you'll get an empty directory with default [inherited] owner and mode bits instead. While you might have the privilege to delete the contents and even the directory, you might not be able to set back the original owner and mode bits on the directory [e.g. you're not a superuser].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]]
- Xóa toàn bộ cây thư mục; Đường dẫn phải trỏ đến một thư mục [nhưng không phải là một liên kết tượng trưng đến một thư mục]. Nếu bỏ qua_errors là đúng, các lỗi do loại bỏ không thành công sẽ bị bỏ qua; Nếu sai hoặc bị bỏ qua, các lỗi như vậy được xử lý bằng cách gọi một trình xử lý được chỉ định bởi Onerror hoặc, nếu điều đó bị bỏ qua, chúng sẽ tăng một ngoại lệ.be patient and read the code. It's long and ugly [in sight], but proven to be reliable and efficient [in use].
Đã trả lời ngày 9 tháng 10 năm 2008 lúc 7:18
Mở rộng câu trả lời của Mhawke Đây là những gì tôi đã thực hiện. Nó loại bỏ tất cả nội dung của một thư mục nhưng không phải là chính thư mục. Được thử nghiệm trên Linux với các tệp, thư mục và liên kết tượng trưng, cũng sẽ hoạt động trên 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]]
- Nó xử lý các tập tin chỉ đọc độc đáo.
Đây là mã [hàm hữu ích duy nhất là
from pathlib import Path
[f.unlink[] for f in Path["/path/to/folder"].glob["*"] if f.is_file[]]
3]:import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
0Đã trả lời ngày 19 tháng 7 năm 2014 lúc 20:21Jul 19, 2014 at 20:21
RockalliterockalliteRockallite
16K7 Huy hiệu vàng53 Huy hiệu bạc48 Huy hiệu đồng7 gold badges53 silver badges48 bronze badges
1
Là một oneliner:
import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
1Một giải pháp mạnh mẽ hơn, kế toán cho các tập tin và thư mục cũng sẽ là [2.7]:
import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
2Đã trả lời ngày 24 tháng 11 năm 2013 lúc 11:22Nov 24, 2013 at 11:22
fmonegagliafmonegagliafmonegaglia
2.6892 Huy hiệu vàng24 Huy hiệu bạc33 Huy hiệu Đồng2 gold badges24 silver badges33 bronze badges
6
Tôi đã từng giải quyết vấn đề theo cách này:
import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
3
Đã trả lời ngày 17 tháng 6 năm 2013 lúc 11:52Jun 17, 2013 at 11:52
ProfHase85ProfHase85ProfHase85
11.4K7 Huy hiệu vàng46 Huy hiệu bạc61 Huy hiệu Đồng7 gold badges46 silver badges61 bronze badges
12
Để xóa tất cả các tệp bên trong thư mục cũng như các hướng dẫn phụ của nó, mà không cần tự xóa các thư mục, chỉ cần làm điều này:
import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
4
Đã trả lời ngày 26 tháng 2 năm 2019 lúc 15:59Feb 26, 2019 at 15:59
Kevin Patelkevin PatelKevin Patel
5559 Huy hiệu bạc11 Huy hiệu đồng9 silver badges11 bronze badges
1
Để xóa tất cả các tệp bên trong thư mục A tôi sử dụng:
import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
5Đã trả lời ngày 12 tháng 5 năm 2021 lúc 19:04May 12, 2021 at 19:04
Andrecandrecandrec
1493 Huy hiệu bạc7 Huy hiệu đồng3 silver badges7 bronze badges
2
Bạn có thể tốt hơn khi sử dụng
from pathlib import Path
[f.unlink[] for f in Path["/path/to/folder"].glob["*"] if f.is_file[]]
2 cho việc này.from pathlib import Path
[f.unlink[] for f in Path["/path/to/folder"].glob["*"] if f.is_file[]]
5 không phân biệt các tệp với các thư mục và bạn sẽ nhanh chóng gặp rắc rối khi cố gắng hủy liên kết các tệp này. Có một ví dụ điển hình về việc sử dụng from pathlib import Path
[f.unlink[] for f in Path["/path/to/folder"].glob["*"] if f.is_file[]]
2 để loại bỏ một thư mục ở đây và gợi ý về cách thích ứng với hoàn cảnh của bạn.
Đã trả lời ngày 9 tháng 10 năm 2008 lúc 5:52Oct 9, 2008 at 5:52
Mhawkemhawkemhawke
82.2K9 Huy hiệu vàng113 Huy hiệu bạc135 Huy hiệu Đồng9 gold badges113 silver badges135 bronze badges
0
Nếu bạn đang sử dụng hệ thống *Nix, tại sao không tận dụng lệnh hệ thống?
import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
6Đã trả lời ngày 12 tháng 6 năm 2018 lúc 9:06Jun 12, 2018 at 9:06
Silverbulletttsilverbulletttsilverbullettt
8261 Huy hiệu vàng10 Huy hiệu bạc13 Huy hiệu đồng1 gold badge10 silver badges13 bronze badges
5
Tôi đã phải xóa các tệp khỏi 3 thư mục riêng biệt bên trong một thư mục mẹ duy nhất:
import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
7Mã đơn giản này đã làm thủ thuật cho tôi: [Tôi đang sử dụng Unix]
import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
8Hi vọng điêu nay co ich.
Đã trả lời ngày 11 tháng 1 năm 2020 lúc 11:34Jan 11, 2020 at 11:34
NicobarnicobarNicoBar
5251 Huy hiệu vàng7 Huy hiệu bạc15 Huy hiệu đồng1 gold badge7 silver badges15 bronze badges
Một giải pháp khác:
import os
import glob
files = glob.glob['/YOUR/PATH/*']
for f in files:
os.remove[f]
9Đã trả lời ngày 12 tháng 5 năm 2014 lúc 16:33May 12, 2014 at 16:33
Robin Winslowrobin WinslowRobin Winslow
10,5K8 Huy hiệu vàng58 Huy hiệu bạc89 Huy hiệu đồng8 gold badges58 silver badges89 bronze badges
1
Tôi konw đó là một chủ đề cũ nhưng tôi đã tìm thấy một cái gì đó thú vị từ trang web chính thức của Python. Chỉ để chia sẻ một ý tưởng khác để loại bỏ tất cả các nội dung trong một thư mục. Bởi vì tôi có một số vấn đề về ủy quyền khi sử dụng SOWL.RMTREE [] và tôi không muốn xóa thư mục và tạo lại nó. Địa chỉ gốc là //docs.python.org/2/l Library/os.html#os.walk. Hy vọng điều đó có thể giúp ai đó.
import shutil
shutil.rmtree['/path/to/folder']
0Đã trả lời ngày 2 tháng 5 năm 2013 lúc 14:24May 2, 2013 at 14:24
SawyerawyerSawyer
5385 Huy hiệu bạc17 Huy hiệu đồng5 silver badges17 bronze badges
Vâng, tôi nghĩ rằng mã này đang hoạt động. Nó sẽ không xóa thư mục và bạn có thể sử dụng mã này để xóa các tệp có tiện ích mở rộng cụ thể.
import shutil
shutil.rmtree['/path/to/folder']
1Đã trả lời ngày 4 tháng 11 năm 2019 lúc 18:59Nov 4, 2019 at 18:59
Cách thực hiện khá trực quan:
import shutil
shutil.rmtree['/path/to/folder']
2Đã trả lời ngày 26 tháng 7 năm 2019 lúc 9:16Jul 26, 2019 at 9:16
ManriquemanriqueManrique
1.9303 huy hiệu vàng15 Huy hiệu bạc34 Huy hiệu đồng3 gold badges15 silver badges34 bronze badges
1
Sử dụng phương thức dưới đây để xóa nội dung của thư mục, không phải chính thư mục:
import shutil
shutil.rmtree['/path/to/folder']
3Đã trả lời ngày 3 tháng 2 năm 2019 lúc 8:23Feb 3, 2019 at 8:23
Amrezzdamrezzdamrezzd
1.61214 Huy hiệu bạc36 Huy hiệu đồng14 silver badges36 bronze badges
3
Trả lời cho một tình huống cụ thể, hạn chế: Giả sử bạn muốn xóa các tệp trong khi duy trì cây con, bạn có thể sử dụng thuật toán đệ quy:
import shutil
shutil.rmtree['/path/to/folder']
4Có thể hơi lạc đề, nhưng tôi nghĩ nhiều người sẽ thấy nó hữu ích
Mark Amery
134K78 Huy hiệu vàng395 Huy hiệu bạc444 Huy hiệu đồng78 gold badges395 silver badges444 bronze badges
Đã trả lời ngày 27 tháng 12 năm 2016 lúc 10:55Dec 27, 2016 at 10:55
fmonegagliafmonegagliafmonegaglia
2.6892 Huy hiệu vàng24 Huy hiệu bạc33 Huy hiệu Đồng2 gold badges24 silver badges33 bronze badges
1
Tôi đã từng giải quyết vấn đề theo cách này:
import shutil
shutil.rmtree['/path/to/folder']
5Đã trả lời ngày 17 tháng 6 năm 2013 lúc 11:52Sep 19 at 17:22
11.4K7 Huy hiệu vàng46 Huy hiệu bạc61 Huy hiệu Đồngdazzafact
Để xóa tất cả các tệp bên trong thư mục cũng như các hướng dẫn phụ của nó, mà không cần tự xóa các thư mục, chỉ cần làm điều này:3 gold badges27 silver badges45 bronze badges
Đã trả lời ngày 26 tháng 2 năm 2019 lúc 15:59
import shutil
shutil.rmtree['/path/to/folder']
6
Kevin Patelkevin PatelMar 21, 2017 at 16:10
5559 Huy hiệu bạc11 Huy hiệu đồngphyslexic
Để xóa tất cả các tệp bên trong thư mục A tôi sử dụng:1 gold badge8 silver badges20 bronze badges
Đã trả lời ngày 12 tháng 5 năm 2021 lúc 19:04
import shutil
shutil.rmtree['/path/to/folder']
7AndrecandrecJul 30, 2019 at 18:40
1493 Huy hiệu bạc7 Huy hiệu đồngPyBoss
Bạn có thể tốt hơn khi sử dụng
2 cho việc này.7 silver badges18 bronze badgesfrom pathlib import Path
[f.unlink[] for f in Path["/path/to/folder"].glob["*"] if f.is_file[]]
1
from pathlib import Path
[f.unlink[] for f in Path["/path/to/folder"].glob["*"] if f.is_file[]]
5 không phân biệt các tệp với các thư mục và bạn sẽ nhanh chóng gặp rắc rối khi cố gắng hủy liên kết các tệp này. Có một ví dụ điển hình về việc sử dụng from pathlib import Path
[f.unlink[] for f in Path["/path/to/folder"].glob["*"] if f.is_file[]]
2 để loại bỏ một thư mục ở đây và gợi ý về cách thích ứng với hoàn cảnh của bạn.import shutil
shutil.rmtree['/path/to/folder']
8Đã trả lời ngày 9 tháng 10 năm 2008 lúc 5:52
MhawkemhawkeJun 20, 2016 at 15:52