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⇐我看不到文档中的force
或overwrite_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)
之间的文件该怎么办?)。尽管也许可以解决(至少在理论上)这种不正确性,但我猜想结果代码会更加繁琐……
必须有一种更好,更右手的方法来做到这一点!