Tôi muốn xóa tất cả các tệp có phần mở rộng .bak
trong một thư mục. Làm thế nào tôi có thể làm điều đó trong Python?Xóa tất cả các tập tin trong một thư mục bằng Python
Trả lời
Via os.listdir
và os.remove
:
import os
filelist = [ f for f in os.listdir(mydir) if f.endswith(".bak") ]
for f in filelist:
os.remove(os.path.join(mydir, f))
Hoặc qua glob.glob
:
import glob, os, os.path
filelist = glob.glob(os.path.join(mydir, "*.bak"))
for f in filelist:
os.remove(f)
Hãy chắc chắn để có trong thư mục chính xác, cuối cùng sử dụng os.chdir
.
Ví dụ đầu tiên của bạn đang sử dụng dự phòng cho các vòng lặp. Bạn có thể vượt qua - [os.remove (f) cho f trong os.listdir (".") Nếu f.endswith (". Bak")] - khi danh sách hiểu được có nghĩa là để được sử dụng. Hoặc bạn có thể di chuyển 'if' trong phần hiểu thành vòng lặp for - cho f trong os.listdir ("."): nếu f.endswith (". Bak"): os.remove (f) – dragonjujo
@ slh2080 Vì bạn nói vấn đề đã được giải quyết, tại sao không đánh dấu câu trả lời là câu trả lời đúng? – blwy10
@dragonjujo, vâng tôi biết, nhưng tôi nghĩ nó sẽ rõ ràng hơn theo cách này .. – miku
Sử dụng os.chdir
để thay đổi thư mục. Sử dụng glob.glob
để tạo danh sách tên tệp kết thúc '.bak'. Các phần tử của danh sách chỉ là các chuỗi.
Sau đó, bạn có thể sử dụng os.unlink
để xóa tệp. (PS. os.unlink
và os.remove
là từ đồng nghĩa cho các chức năng tương tự.)
#!/usr/bin/env python
import glob
import os
directory='/path/to/dir'
os.chdir(directory)
files=glob.glob('*.bak')
for filename in files:
os.unlink(filename)
bạn có thể tạo một hàm. Thêm maxdepth như bạn muốn để duyệt qua các thư mục con.
def findNremove(path,pattern,maxdepth=1):
cpath=path.count(os.sep)
for r,d,f in os.walk(path):
if r.count(os.sep) - cpath <maxdepth:
for files in f:
if files.endswith(pattern):
try:
print "Removing %s" % (os.path.join(r,files))
#os.remove(os.path.join(r,files))
except Exception,e:
print e
else:
print "%s removed" % (os.path.join(r,files))
path=os.path.join("/home","dir1","dir2")
findNremove(path,".bak")
Trong Python 3.5, os.scandir
là tốt hơn nếu bạn cần phải kiểm tra cho các thuộc tính tập tin hoặc loại - xem os.DirEntry
đối với tài sản của đối tượng đó là trả về bởi hàm.
import os
for file in os.scandir(path):
if file.name.endswith(".bak"):
os.unlink(file.path)
Điều này cũng không yêu cầu thay đổi thư mục vì mỗi DirEntry
đã bao gồm đường dẫn đầy đủ vào tệp.
Bạn đang thiếu dấu hai chấm, dòng đầu tiên bên trong vòng lặp for nên là 'if file.name.endswith (". Bak "):' – TSeymour
Cảm ơn!Điều đó sẽ dạy tôi viết mã mà không thực sự chạy chúng –
Trên Linux và MacOS bạn có thể chạy lệnh đơn giản để vỏ:
subprocess.run('rm /tmp/*.bak', shell=True)
Không phải là một lựa chọn tốt trong quan điểm của tôi. Nó không phải di động và nó có thể đắt hơn do quá trình phụ phụ. Tốt hơn để sử dụng các API Python. – Haakon
- 1. Xóa tất cả các tập tin trong một thư mục
- 2. Sao chép tất cả các tập tin trong thư mục
- 3. Làm thế nào để xóa tất cả các tập tin trong một thư mục bằng cách sử dụng hàng loạt?
- 4. Scala - Iterator trên tất cả các dòng trong các tập tin trong một thư mục
- 5. Tìm tất cả các tập tin trong thư mục không phải là thư mục tự
- 6. Sử dụng Python để thực hiện một lệnh trên tất cả các tập tin trong một thư mục
- 7. Làm thế nào để tải tất cả các tập tin trong một thư mục với XNA?
- 8. Lấy danh sách tất cả các tập tin bên trong một thư mục trong vb.net
- 9. Xóa tất cả các tệp git khỏi một thư mục?
- 10. Buộc xóa tất cả các tệp khỏi một thư mục
- 11. Shellscript Looping Thông qua tất cả các tập tin trong một thư mục
- 12. gmake biên dịch tất cả các tập tin trong một thư mục
- 13. bỏ qua tập tin nhất định trong tất cả các thư mục sử dụng một tập tin duy nhất .gitignore
- 14. linux bash - xóa tất cả các tệp nằm trong một thư mục từ một thư mục khác
- 15. Nén tất cả mọi thứ trong thư mục với 7z trừ một tập tin hoặc một loại tập tin
- 16. Diff Một thư mục đệ quy, bỏ qua tất cả các tập tin nhị phân:
- 17. Xóa thư mục bằng Python
- 18. Cách xóa tất cả các thư mục có tên x trong thư mục bằng tệp cmd/batch
- 19. Xóa các thư mục và chứa các tập tin
- 20. Tìm tất cả các tệp CSV trong một thư mục bằng cách sử dụng Python
- 21. Hủy bỏ tất cả các file trong một thư mục
- 22. cách lấy tất cả các tập tin trong một thư mục trong ipad sử dụng mục tiêu c
- 23. Tập tin bó Windows - Kết hợp tất cả các tệp trong thư mục con
- 24. Mở tất cả các tệp trong một thư mục
- 25. GitHub API: Fetch tất cả các thư mục và tập tin trong đơn GET Yêu cầu
- 26. iPhone SDK Xcode - Cách lấy tất cả các tên tập tin trong thư mục tài liệu
- 27. Đổi tên tất cả các tệp trong thư mục bằng tập lệnh batch của Windows
- 28. Lặp qua các tập tin trong một thư mục
- 29. Nhận tất cả tên tệp trong thư mục bằng JFileChooser?
- 30. Mục tiêu c: Làm thế nào để chỉ xóa tất cả tập tin trong một thư mục nhưng giữ cho chính thư mục
@ slh2080: Đăng "Giải Quyết" không phải là những gì bạn làm trên trang web này. Những gì bạn làm là chọn câu trả lời mà bạn thực sự đã sử dụng và nhấp vào dấu kiểm để cho biết rằng nó đã giải quyết được sự cố của bạn. –
Xin lỗi. Cảm ơn vì đã chỉ ra sai lầm của tôi. Nó không phải là bài tập về nhà, chỉ cần học python trong thời gian rảnh rỗi của tôi. Tôi nhấp vào câu trả lời tôi đã sử dụng nhưng đó là trước khi tôi nhìn thấy phản ứng ghostdog74. – slh2080
lưu ý: để xóa toàn bộ cây thư mục ['shutil.rmtree (đường dẫn)' có thể sử dụng] (https://docs.python.org/3/library/shutil.html#shutil.rmtree). – jfs