Nếu tôi có tệp .tar có tệp '/path/to/file.txt'
, có cách nào (bằng Python) để trích xuất tệp vào thư mục được chỉ định mà không cần tạo lại thư mục '/path/to'
không?Python: Trích xuất bằng tarfile nhưng bỏ qua các thư mục
Trả lời
Bạn có thể sử dụng TarFile.extractfile(member) để trích xuất tệp cụ thể.
Nó trả về một đối tượng giống filelike (Python điển hình) mà bạn có thể sử dụng để ghi nội dung vào một tệp trên bất kỳ vị trí nào bạn muốn.
Theo mô-đun tarfile, bạn có thể làm điều đó dễ dàng. Tôi chưa kiểm tra.
TarFile.extract(member, path="")
Tài liệu:
Giải nén thành viên từ kho lưu trữ vào thư mục làm việc hiện tại, sử dụng tên đầy đủ của nó. Thông tin tệp của nó được trích xuất chính xác nhất có thể. thành viên có thể là tên tệp hoặc đối tượng TarInfo. Bạn có thể chỉ định một thư mục khác sử dụng đường dẫn.
Vì vậy, bạn sẽ có thể làm
TarFile.extract(member, path=".")
Xem tài liệu đầy đủ tại địa chỉ: http://docs.python.org/library/tarfile.html
Khi các tài liệu nói "với thư mục làm việc hiện tại, sử dụng tên đầy đủ của nó", "tên đầy đủ" thực sự là một đường dẫn. Họ có thể nói chính xác hơn "sử dụng đường dẫn đầy đủ của nó, bắt đầu từ thư mục làm việc hiện tại ... Bạn có thể chỉ định thư mục khởi động khác bằng đường dẫn". Vì vậy, câu trả lời này sẽ không hoạt động. Câu trả lời của ekhumoro có vẻ tốt hơn. – Weeble
Các thuộc tính dữ liệu của một đối tượng TarInfo
đó vẫn được phép. Vì vậy, chỉ cần thay đổi name
để bất cứ điều gì bạn muốn và sau đó giải nén nó:
import sys, os, tarfile
args = sys.argv[1:]
tar = tarfile.open(args[0])
member = tar.getmember(args[1])
member.name = os.path.basename(member.name)
path = args[2] if len(args) > 2 else ''
tar.extract(member, path)
+1 cho lời nhắc về 'os.path.basename()' – metasequoia
tôi gặp vấn đề này là tốt, và danh sách các ví dụ hoàn chỉnh dựa trên câu trả lời ekhumoro của
import os, tarfile
output_dir = "."
tar = tarfile.open(tar_file)
for member in tar.getmembers():
if member.isreg(): # skip if the TarInfo is not files
member.name = os.path.basename(member.name) # remove the path by reset it
tar.extract(member,output_dir) # extract
- 1. Trích xuất chỉ một thư mục duy nhất từ tar
- 2. thêm thư mục trống vào tarfile
- 3. bỏ qua các thư mục trong mercurial
- 4. DotNetZip: Cách trích xuất tệp, nhưng bỏ qua đường dẫn trong tệp zipfile?
- 5. SVN: Bỏ qua nhưng KHÔNG xóa một thư mục
- 6. Xuất thư mục zope bằng python
- 7. Latex - trích xuất chuỗi con/bỏ qua các ký tự
- 8. SVN: Bỏ qua các thư mục con
- 9. Bỏ qua các thư mục trong PhpStorm
- 10. Danh sách các thư mục trong một thư mục, bỏ qua các tiểu thư mục ANT
- 11. Bỏ qua/bỏ qua thư mục/tệp trong TortoiseSVN
- 12. Trích xuất luồng Python
- 13. Trích xuất tất cả các tệp có đường dẫn thư mục trong thư mục đã cho
- 14. Đầu ra tiến trình tarfile của Python?
- 15. Cách trích xuất trang trình bày từ video bằng python
- 16. Trích xuất jar vào thư mục được chỉ định
- 17. libarchive - Trích xuất vào thư mục được chỉ định
- 18. mẫu thư mục gitignore bỏ qua thư mục với cùng một hậu tố, nhưng tôi muốn đưa nó
- 19. thư mục con git bị bỏ qua
- 20. .gitignore sẽ không bỏ qua thư mục
- 21. Bỏ qua các thư mục con trong .ackrc
- 22. Bỏ qua thư mục trong msdeploy
- 23. Không thể hiểu cách gitignore bỏ qua các thư mục
- 24. Trích xuất tọa độ từ tệp KML BatchGeo bằng Python
- 25. Git có bỏ qua các thư mục trống không?
- 26. msdeploy bỏ qua cho các thư mục tên chính xác
- 27. Python - Trích xuất đường dẫn thư mục từ đường dẫn tập tin
- 28. xuất khẩu svn tất cả nhưng một số thư mục
- 29. Trích xuất một phần của filepath (một thư mục) trong Python
- 30. Một bộ tập lệnh Python có thể bỏ qua các thư mục
Điều đó sẽ làm việc, nhưng nó doesn không lưu trữ siêu dữ liệu tệp (thời gian sửa đổi, v.v.). –