gpt4 book ai didi

python - Linux 上的 shutil samefile 错误

转载 作者:行者123 更新时间:2023-11-28 17:27:29 25 4
gpt4 key购买 nike

我有一个 python 脚本,它让我在使用 Python 2.7.3 的 Ubuntu 12.02 上遇到困难。

PS:它在 Windows 上运行没有问题。

>>> import os
>>> import shutil

>>> shutil.copy("/mnt/my_network_dive/somewhere/sample.xml", "/mnt/my_network_drive/COMPLETED/")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/shutil.py", line 117, in copy
copyfile(src, dst)
File "/usr/lib/python2.7/shutil.py", line 69, in copyfile
raise Error("`%s` and `%s` are the same file" % (src, dst))
shutil.Error: `/mnt/my_network_dive/somewhere/sample.xml` and `/mnt/my_network_drive/COMPLETED/sample.xml` are the same file

检查文件的一些属性:

>>> os.path.exists("/mnt/my_network_drive/somewhere/sample.xml")
True
>>> os.path.exists("/mnt/my_network_drive/COMPLETED/sample.xml")
True
>>> os.stat("/mnt/my_network_drive/somewhere/sample.xml")
posix.stat_result(st_mode=33272, st_ino=4913809333, st_dev=25L, st_nlink=1, st_uid=1000, st_gid=0, st_size=5447, st_atime=1465311674, st_mtime=1465311674, st_ctime=1465311685)
>>> os.stat("/mnt/my_network_drive/COMPLETED/sample.xml")
posix.stat_result(st_mode=33272, st_ino=4913809333, st_dev=25L, st_nlink=1, st_uid=1000, st_gid=0, st_size=10, st_atime=1465317482, st_mtime=1465317482, st_ctime=1465317483)
>>> os.path.islink("/mnt/my_network_drive/somewhere/sample.xml")
False
>>> os.path.islink("/mnt/my_network_drive/COMPLETED/sample.xml")
False

>>> shutil._samefile("/mnt/my_network_dive/somewhere/sample.xml", "/mnt/my_network_drive/COMPLETED/sample.xml")
False

如您所见,调用 shutil._samefile 我得到 Falseshutil.copy 仍然引发 samefile 错误.

我是不是忘记了什么?还有其他使用 Python 移动或复制文件的方法吗?

最佳答案

看起来这两个文件都是同一个文件的硬链接(hard link)。您可以分辨出来,因为它们共享相同的 inode 编号

st_ino=4913809333

Windows 用户通常不会创建硬链接(hard link)。它们在 Linux 环境中更为常见,这就是为什么您可能直到现在才遇到该问题的原因。

奇怪的是 samefile 返回 False。您使用的是什么操作系统? shutil._samefile 只是 os.path.samefile 的包装器(在存在该功能的系统上)。您从 os.path.samefile 得到什么结果?在 posix 系统上,它只是检查设备和 inode 是否匹配(它们在你的情况下这样做)并且它应该返回 True

posixpath.py

def samefile(f1, f2):
s1 = os.stat(f1)
s2 = os.stat(f2)
return samestat(s1, s2)

def samestat(s1, s2):
return s1.st_ino == s2.st_ino and s1.st_dev == s2.st_dev

关于python - Linux 上的 shutil samefile 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37685401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com