python中将不同文件中的cropped文件复制到同一个文件夹里,并且复制过去以后如果名字一样就自动加_1,然后那个是自加的
时间: 2024-09-10 21:19:28 浏览: 44
在Python中,你可以使用`shutil`库中的`copy2`函数来复制文件,并通过文件名的处理来避免重名的问题。以下是一个简单的示例代码,展示了如何实现这一功能:
```python
import os
import shutil
def copy_cropped_files(src_dirs, dest_dir):
# 检查目标目录是否存在,不存在则创建
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
# 用于记录已经复制过的文件名,避免重名
copied_files = set()
for src_dir in src_dirs:
# 遍历指定目录中的文件
for filename in os.listdir(src_dir):
# 检查文件后缀是否为cropped
if filename.endswith("cropped"):
# 完整的目标文件名(包含目录)
dest_file = os.path.join(dest_dir, filename)
# 如果目标文件已存在,则生成新的文件名
counter = 1
while dest_file in copied_files:
# 生成新的文件名,格式为:原文件名_序号.cropped
filename_parts = filename.rsplit('.', 1)
filename_base, file_extension = filename_parts[0], filename_parts[1]
new_filename = f"{filename_base}_{counter}.{file_extension}"
dest_file = os.path.join(dest_dir, new_filename)
counter += 1
# 复制文件到目标目录,并记录已复制的文件名
shutil.copy2(os.path.join(src_dir, filename), dest_file)
copied_files.add(dest_file)
print(f"文件 '{filename}' 已复制到 '{dest_dir}'")
# 使用示例
source_directories = ['path/to/directory1', 'path/to/directory2'] # 替换为实际的文件夹路径
destination_directory = 'path/to/destination' # 替换为实际的目标文件夹路径
copy_cropped_files(source_directories, destination_directory)
```
这段代码首先定义了一个函数`copy_cropped_files`,它接受源目录列表和目标目录作为参数。函数会遍历每个源目录中的文件,检查文件名是否以"cropped"结尾,并尝试复制到目标目录中。如果在目标目录中已经存在同名文件,它会自动在文件名后面添加一个递增的序号(如`_1`、`_2`等),直到找到一个不冲突的文件名为止。
阅读全文