Python-覆盖链接(如果存在)

问题描述 投票:1回答:1
from os import link

link('WInd_Rose_Aguiar.svg', 'Wikipedia Daily Featured Picture')

# A day has passed

link('Piero_del_Pollaiuolo_-_Profile_Portrait_of_a_Young_Lady_-_Gemäldegalerie_Berlin_-_Google_Art_Project.jpg',
     'Wikipedia Daily Featured Picture') # Exception

调用上述脚本的结果:

my@comp:~/wtfdir$ python3 wtf.py
Traceback (most recent call last):
  File "wtf.py", line 8, in <module>
    'Wikipedia Daily Featured Picture') # Exception
FileExistsError: [Errno 17] File exists: 'Piero_del_Pollaiuolo_-_Profile_Portrait_of_a_Young_Lady_-_Gemäldegalerie_Berlin_-_Google_Art_Project.jpg' -> 'Wikipedia Daily Featured Picture'

创建第一个链接成功。创建第二个失败。

这几乎不是我期望的...我的意图是覆盖此链接。

[https://docs.python.org/3/library/os.html#os.link⇐我看不到文档中的forceoverwrite_if_exists或类似函数link的参数。

如何创建指向新源的链接,如果存在则覆盖以前的链接?

是的–我想我可以做这样的事情:

from os import link, remove
from os.path import isfile

def force_link(src, dest):
    if isfile(dest):
        remove(dest)
    link(src, dest)

force_link('WInd_Rose_Aguiar.svg', 'Wikipedia Daily Featured Picture')

# A day has passed

force_link('Piero_del_Pollaiuolo_-_Profile_Portrait_of_a_Young_Lady_-_Gemäldegalerie_Berlin_-_Google_Art_Project.jpg',
     'Wikipedia Daily Featured Picture') # No longer exception

但是这很麻烦,至少从理论上讲可能是不正确的(如果其他进程重新创建remove(dest)link(src, dest)之间的文件该怎么办?)。尽管也许可以解决(至少在理论上)这种不正确性,但我猜想结果代码会更加繁琐……

必须有一种更好,更右手的方法来做到这一点!

python overwrite hardlink
1个回答
2
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.