代码之家  ›  专栏  ›  技术社区  ›  krock1516

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

  •  -1
  • krock1516  · 技术社区  · 7 年前

    我正在使用将文件从源目录复制到远程目录 shutil() 不过,我需要进行以下几项检查。

    1. 不要将零字节文件复制到远程。

    2. 如果远程服务器上已存在该文件,请不要再复制该文件,除非源服务器中的文件已更改内容或更新。

    3. 我正在查找当前月份的目录,因此,如果目录在当前月份可用,请遍历到该目录,就像它应该是当前月份的1月份一样。

    导入模块:

    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_month 但是,硬编码目录名是可行的。

    由于缺乏Python知识,我面临着挑战。

    这个变量怎么算 信息月 进入源目录路径?

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

    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
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   tripleee    7 年前

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

    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