【问题标题】:Comparing file with a list of files using filecmp.cmp(file1, file2)使用 filecmp.cmp(file1, file2) 将文件与文件列表进行比较
【发布时间】:2021-08-17 19:01:23
【问题描述】:

我有一个带有三个参数的函数

  • list_to_copy : 我要复制的文件列表。
  • list_to_avoid : 我不想复制的列表,可能存在于 list_to_copy 中
  • 目标是文件所在的路径。
    def copy_files(self, list_to_copy, list_to_avoid, destination):
        # Copy a file from list to destination making sure file is not 
        # duplicated regarding the name.
        for copied_file in list_to_copy:
            for avoid_file in list_to_avoid:
                if not filecmp.cmp(copied_file, avoid_file):
                    shutil.copy(copied_file, destination)

我的主要问题是我不知道如何使用filecmp.cmp(file1, file2)copied_filelist_to_avoid 中的所有文件进行比较


按文件名(字符串)检查笔记对我来说效率不高。

【问题讨论】:

  • 是你所拥有的只是效率低下的问题吗?
  • @ChaseLp 我没那么先进。我在复制文件后重命名文件,因此我需要与不同的方式进行比较以避免重复文件。如果你有建议帮助我^_^

标签: python python-3.x


【解决方案1】:
from filecmp import cmp
from shutil import copy
from os import scandir
def copy_files(list_to_copy,destination):
# Copy a file from list to destination making sure file is not duplicated regarding the content.
    for copied_file in list_to_copy:
        for avoid_file in scandir(destination):
            if cmp(copied_file,avoid_file):
                break
        else:
            copy(copied_file, destination)

【讨论】:

  • 这对我不起作用,因为在重命名过程后字符串将被更改。我的代码不断地将文件从路径 A 复制到 B,然后在路径 B 上用日期和时间重命名它们。因此,对于下一个周期,名称会更改,因此每个周期都会添加具有不同名称的相同文件。但是感谢您的帮助^_^
  • 我不明白。制作每个副本后列表 list_to_avoid 是否更改?还是每次调用函数都会改变?
  • 如果每次复制后都更改,则添加最后一行:list_to_avoid.append("[NEW THING TO AVOID]")
  • list_to_copy 每次调用该函数时都会更改。这两个文件是相同的,但带有日期的文件被重命名,但命名的 GUID 在代码的下一个循环中再次复制 link
  • list_to_avoid.append("[NEW THING TO AVOID]") 这可以工作,但只能用于一个会话,可能是一个包含复制文件历史的数据文件。不过,我想避免使用数据文件。
猜你喜欢
  • 2020-03-24
  • 2020-06-01
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多