在同一目录中制作单个文件的多个副本

克里斯托弗

您将获得以下格式的数组:

file_name_and_desti_subdir
    = [['1020','A']
       ['1020','A']
       ['1106','A']
       ['1003','B']
       ['1003','B']
       ['1004','C']
       ['1005','C']]

使用此数组,您需要从给定目录复制到给定目标目录。“1013”指定没有扩展名的文件名,“A”指定目标的子目录。

因此,在代码运行完成后,文件结构应如下所示:

Destination 
  A
     1020.jpg
     1020(1).jpg
     1106.jpg
  B
     1003.jpg
     1003(1).jpg
  C
     1004.jpg
     1005.jpg

为此,您需要从源文件中选择正确的项目并将其复制到目标文件中的所需位置。

这里是我累了。(或者至少是它的简化版本)

from shutil import copy
from os import wlak, path

def copyFile(source, desti, file_name_and_desti_subdir)

    for item in file_name_and_desti_subdir:
        for root, subdir, files in walk(source): #using os.walk to find correct item in source
            for file in files:

                item_source_path = path.join(root, file) #constructing source path of item

                if file.split('.')[0] == item[0]: #choice structure
                    if item[1] == 'A':
                        copy(item_source_path, desti + "\\A")
                    elif item[1] == 'B':
                        copy(item_source_path, desti + "\\B")
                    elif item[1] == 'C':
                        copy(item_source_path, desti + "\\C")

但是,此代码将产生以下文件结构:

Destination 
  A
     1020.jpg
     1106.jpg
  B
     1003.jpg
  C
     1004.jpg
     1005.jpg

请注意,已复制两次的项目不包括在内,因为它们已被覆盖。我的问题是如何防止这种形式的发生。

克里斯托弗

对于任何感兴趣的人,我最终在评论中使用了 VPfB 提供的示例。他提供的例子不是他自己的。它是用 python 2 编写的,因此必须进行一些更改。它还将文件的版本附加到扩展名,这会引起一些麻烦。原始示例)这是我调整后的版本。

   from os import path
   from shutil import copy

    def VersionFile(source, destination):
        if path.isfile(destination):
            name, extension = path.splitext(destination)
            for i in range(1000):
                new_file = f'{name} ({i}){extension}'
                if not path.isfile(new_file):
                    copy(source, new_file)
                    break

为此,我还需要查找数组中的任何重复项,然后计算每个出现的次数。我将重复项保存在一个数组中,然后保存它们在另一个并行数组中出现的次数。

然后在核心循环中,我将 ifs 和 elifs 更改为如下:

if item[1] == 'A':
     copy(item_source_path, desti + "\\A")
     if item in duplicates:
         for i in range(duplicates_count[duplicates.index(item)])
              VersionFile(item_source_path,  desti + "\\A\\" + file)
     break

(增加了休息时间以减少运行时间)

然后在第一个 for 循环之后,我只是添加了一个检查以确保该项目的所有后续出现都被忽略。从现在开始,我还需要按索引引用项目。(重复项总是紧挨着出现。)。

   for i in range(len(file_name_and_desti_subdir):
       item = file_name_and_desti_subdir[i]
          if package == file_name_and_desti_subdir[i - 1]:
             pass
          else:
             ...(main loop)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何制作文件副本并将其放置在从中复制的同一目录中?

在同一目录中创建文件的副本

在python中从同一目录修改多个.csv文件

将文件副本保留在同一目录中

GNU如何为不在同一目录中的文件制作静态模式规则?

将文件复制到同一目录中的多个子目录

如何将多个目录下的文件移动到同一目录中?

查找在同一目录中同时存在该文件名的多个变体的文件

Shell脚本修改具有同一目录中多个文件的文件名的变量

对同一目录下的多个文件应用相同的代码

在Python中同一目录中的多个文件进行循环

使用package.json脚本在同一目录中复制多个文件?

Linux Bash:将多个不同的文件移动到同一目录中

使用Gulp在同一目录中的多个文件扩展名

读取与JavaScript文件位于同一目录中的文件

如何在同一目录中的Pod之间共享单个可写文件,并且该文件不可共享(可写configmap)

GO:无法从同一目录中的文件导入函数

VS Code 无法识别同一目录中的文件

无法从同一目录中的文件导入函数

如何让我的scrapy读取同一目录中的文件?

CGo不在同一目录中编译C文件

如何从python中的同一目录导入文件?

将相应文件排序到同一目录中

根据内容对同一目录中的文件进行分组

从VSCode中的同一目录导入文件

如何在同一目录中复制文件

重命名同一目录中的文件-Shell脚本

如何读取同一目录中的所有文件?

在同一目录中的多个CSV文件中删除前两列和最后一列