Python 3.x python shutil根据条件将文件从源目录复制到远程目录

Python 3.x python shutil根据条件将文件从源目录复制到远程目录,python-3.x,python-datetime,shutil,Python 3.x,Python Datetime,Shutil,我希望使用shutil()将文件从源目录复制到远程目录,但是我需要进行以下几项检查 不要将零字节文件复制到远程 如果该文件已在远程上退出,则不要再次复制它,除非源中的文件已更改内容或更新 我正在寻找当前月份的目录,因此,如果该目录在当前月份可用,则遍历到该目录,就像当前月份应该是一月一样 导入模块: import os import glob import shutil import datetime 选择当前月份的变量: Info_month = datetime.datetime.now(

我希望使用
shutil()
将文件从源目录复制到远程目录,但是我需要进行以下几项检查

  • 不要将零字节文件复制到远程

  • 如果该文件已在远程上退出,则不要再次复制它,除非源中的文件已更改内容或更新

  • 我正在寻找当前月份的目录,因此,如果该目录在当前月份可用,则遍历到该目录,就像当前月份应该是一月一样

  • 导入模块:

    import os
    import glob
    import shutil
    import datetime
    
    选择当前月份的变量:

    Info_month = datetime.datetime.now().strftime("%B")
    
    代码段:

    for filename in glob.glob("/data/Info_month/*/*.txt"):
        if not os.path.exists("/remote/data/" + os.path.basename(filename)):
            shutil.copy(filename, "/remote/data/")
    
    上面的代码不使用变量
    Info\u month
    ,但是,硬编码目录名是有效的

    由于缺乏Python知识,我遇到了一些挑战

    如何将变量
    Info\u month
    包含到源目录路径中

    如何检查不复制零字节文件

    os.path.getsize(fullpathhere) > 0
    
    我最基本的愚蠢逻辑:

    for filename in glob.glob("/data/Info_month/*/*.txt"):
        if os.path.getsize(fullpathhere) > 0 :
            if not os.path.exists("/remote/data/" + os.path.basename(filename)):
                shutil.copy(filename, "/remote/data/")
        else:
            pass
    

    下面是对现有脚本的修复。这还没有尝试实现“源代码比目标代码更新”的逻辑,因为您没有明确询问这一点,而且这可能已经太广泛了

    for filename in glob.glob("/data/{0}/*/*.txt".format(Info_month)):
        # The result of the above glob _is_ a full path
        if os.path.getsize(filename) > 0:
            # Minor tweak: use os.path.join for portability
            if not os.path.exists(os.path.join(["/remote/data/", os.path.basename(filename)])):
                shutil.copy(filename, "/remote/data/")
        # no need for an explicit "else" if it's a no-op
    

    不是我的反对票,但你似乎把许多非常基本的问题合并到一篇文章中。获取堆栈溢出问题答案的一个好方法是只问一个问题,并在谷歌搜索答案后准确演示您的困境。例如,“如何将变量插入Python字符串”是第一个谷歌结果。使用月份名称作为目录名似乎是一个糟糕的主意。使用月号可以方便地在计算机上访问它们,并且在列出它们时也可以正确排序。@tripleee,非常感谢您的解释,确实由于某些原因,我需要在这里使用月名。再次感谢您的修复,对于数据检查
    源代码比目标代码更新的文件内容,我将向用户提出另一个问题。。谢谢你的专业知识,如果我不理解,我会尝试用谷歌搜索,我会提出一个新问题,希望这是可以期待的。然而,我正在寻找两侧文件上的数据,如果这是相似的,那么不要覆盖,只从源文件中写入较新的位。