gpt4 book ai didi

Python Shutil.copy 如果我有重复文件,它会复制到新位置

转载 作者:行者123 更新时间:2023-11-28 22:40:44 25 4
gpt4 key购买 nike

我正在使用 python 中的 shutil.copy 方法。

我找到了下面列出的定义:

def copyFile(src, dest):
try:
shutil.copy(src, dest)
# eg. src and dest are the same file
except shutil.Error as e:
print('Error: %s' % e)
# eg. source or destination doesn't exist
except IOError as e:
print('Error: %s' % e.strerror)

我正在循环中访问定义。该循环基于每次都会更改的字符串。该代码查看目录中的所有文件,如果它在文件中看到字符串的一部分,则将其复制到新位置

我很确定会有重复的文件。所以我想知道会发生什么。

它们会被复制,还是会失败?

最佳答案

shutil.copy不会将文件复制到新位置,它会覆盖文件。

Copy the file src to the file or directory dst. If dst is a directory, a file with the same basename as src is created (or overwritten) in the directory specified. Permission bits are copied. src and dst are path names given as strings.

因此您必须自行检查目标文件是否存在并适本地更改目标。例如,这是您可以用来实现安全复制的方法:

def safe_copy(file_path, out_dir, dst = None):
"""Safely copy a file to the specified directory. If a file with the same name already
exists, the copied file name is altered to preserve both.

:param str file_path: Path to the file to copy.
:param str out_dir: Directory to copy the file into.
:param str dst: New name for the copied file. If None, use the name of the original
file.
"""
name = dst or os.path.basename(file_path)
if not os.path.exists(os.path.join(out_dir, name)):
shutil.copy(file_path, os.path.join(out_dir, name))
else:
base, extension = os.path.splitext(name)
i = 1
while os.path.exists(os.path.join(out_dir, '{}_{}{}'.format(base, i, extension))):
i += 1
shutil.copy(file_path, os.path.join(out_dir, '{}_{}{}'.format(base, i, extension)))

此处,'_number' 被插入到扩展名之前,以在重复的情况下生成唯一的目的地名称。像 'foo_1.txt'

关于Python Shutil.copy 如果我有重复文件,它会复制到新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282647/

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