Làm cách nào để thay đổi như liên kết tượng trưng trỏ từ tệp này sang tệp khác trong Python? Hàm os.symlink() dường như chỉ hoạt động để tạo các liên kết mới.Sửa đổi một liên kết tượng trưng trong python
Trả lời
Bạn có thể os.unlink()
trước tiên và sau đó tạo lại bằng cách sử dụng os.symlink()
để trỏ đến mục tiêu mới.
Tôi đã nghiên cứu câu hỏi này gần đây và phát hiện ra rằng cách tốt nhất thực sự là unlink
và sau đó là symlink
. Nhưng nếu bạn chỉ cần để sửa chữa các liên kết bị hỏng, ví dụ với tính năng tự động thay thế, sau đó bạn có thể làm os.readlink
:
for f in os.listdir(dir):
path = os.path.join(dir, f)
old_link = os.readlink(path)
new_link = old_link.replace(before, after)
os.unlink(path)
os.symlink(new_link, path)
Một chức năng ít mà cố gắng liên kết mềm và nếu nó không thành công vì một tập tin hiện có, nó loại bỏ nó và liên kết lại.
import os, errno
def symlink_force(target, link_name):
try:
os.symlink(target, link_name)
except OSError, e:
if e.errno == errno.EEXIST:
os.remove(link_name)
os.symlink(target, link_name)
else:
raise e
Nếu bạn cần sửa đổi nguyên tử, hủy liên kết sẽ không hoạt động.
Một giải pháp tốt hơn là để tạo ra một liên kết tượng trưng tạm thời mới, và sau đó đổi tên nó trên hiện có:
os.symlink(target, tmpLink)
os.rename(tmpLink, linkName)
Bạn có thể kiểm tra để chắc chắn rằng nó đã được cập nhật một cách chính xác quá:
if os.path.realpath(linkName) == target:
# Symlink was updated
Theo tài liệu hướng dẫn cho os.rename, có thể không có cách nào để thay đổi nguyên tử một liên kết tượng trưng trong Windows. Trong trường hợp đó, bạn chỉ cần xóa và tạo lại.
Đừng quên để thêm một lệnh tăng lương trong trường hợp khi e.errno = errno.EEXIST Bạn không muốn để ẩn một lỗi sau đó:
if e.errno == errno.EEXIST:
os.remove(link_name)
os.symlink(target, link_name)
else:
raise
- 1. Liên kết tượng trưng trong windows XP
- 2. .htaccess hoặc liên kết tượng trưng (symlink)
- 3. Liên kết cứng và liên kết tượng trưng trong Unix
- 4. Liên kết tượng trưng đến một cái móc trong git
- 5. chuyển đổi các liên kết tượng trưng tương đối thành các liên kết tượng trưng tuyệt đối
- 6. Emacs và các liên kết tượng trưng
- 7. Phát hiện một liên kết tượng trưng trong Java
- 8. android: xác định liên kết tượng trưng
- 9. Kiểm tra liên kết tượng trưng
- 10. Tạo liên kết tượng trưng với Java
- 11. File.Copy() và Liên kết tượng trưng
- 12. Tạo một liên kết tượng trưng tương đối trong python mà không sử dụng os.chdir()
- 13. Có gì đằng sau một liên kết tượng trưng?
- 14. Xóa các liên kết tượng trưng trong PHP
- 15. Bỏ qua các liên kết tượng trưng trong .gitignore
- 16. Nginx không theo các liên kết tượng trưng
- 17. Thay thế liên kết tượng trưng quan trọng ‘an toàn’
- 18. Kiểm tra xem tệp có phải là liên kết tượng trưng trong python
- 19. Thay đổi mục tiêu cho liên kết tượng trưng trong cửa sổ
- 20. tập tin quy tắc debian tạo liên kết tượng trưng
- 21. có thể liên kết tượng trưng tấn công
- 22. Có phiên bản nào của os.getcwd() không liên quan đến các liên kết tượng trưng không?
- 23. Làm cách nào để xóa liên kết tượng trưng?
- 24. tạo liên kết tượng trưng: Lỗi giao thức
- 25. Tạo liên kết tượng trưng trong tập lệnh bash trong một thư mục khác
- 26. Một đối tượng trong Google Cloud Storage hoạt động như một "chuyển hướng" hoặc "liên kết tượng trưng"
- 27. Có thể tạo liên kết tượng trưng đến tệp mới nhất trong một thư mục không?
- 28. Tìm hiểu xem tệp có phải là một liên kết tượng trưng trong PowerShell
- 29. Tạo một liên kết tượng trưng của thư mục trong Ubuntu
- 30. Bắt con đường logic trong VIM khi có một liên kết tượng trưng
Python 3.3 có 'os.replace' có thể được sử dụng thay vì 'os.rename' để cung cấp cùng một hành vi trên các hệ thống Posix & Windows. – Tom