【问题标题】:python - how to move only updated files from folder to folder?python - 如何仅将更新的文件从文件夹移动到文件夹?
【发布时间】:2013-09-22 14:32:19
【问题描述】:

我有我的源目录和目标目录,包含 5 个 DLL。 我想做的是: 如果 DLL 未更新,则替换 DLL 如果没有 - 跳过

问题是我不知道如何检查 DLL 是否已更新。例如,如果在 dest 目录中我的 DLL 是“9/22/2013 15:15”,而在我的源代码中它是“9/ 22/2012 16:00" 然后我想更换它

我用来更新的代码是:

import shutil
src = "C:\\steve_test\\Test_xp\\added"
dst = "C:\\steve_test\\Test_xp\\moved"
shutil.move(src, dst)

【问题讨论】:

  • 你试过什么?您可能会发现 os.stat() 很有用。
  • 我写的代码是我试过的,但它给了我一个错误,第二次告诉我文件已经存在

标签: python dll replace updates


【解决方案1】:

我建议你使用 os.stat

理想情况下,您可以检查最近修改了哪些对象,检查源文件夹和目标文件夹中dll 文件的st_mtime 值,并查看哪个更大。如果st_mtime 是你的源文件夹文件大于你的目标文件夹文件,那么你移动它们,否则你可以忽略它们。

此答案假定您的 python 文件与您的 srcdest 目录位于同一目录级别。下面代码背后的逻辑应该向您展示如何更新文件:

根目录

Root
|
├───dest
├───src
└───updater.py

updater.py

import os
import shutil

# Imported for convenience
from collections import namedtuple

# Main function, so this can act like a script
if __name__ == '__main__':
    ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__)))  # Root directory

    file_change_times_dest = []  # List of files from destination folder
    file_change_times_src = []  # List of files from source folder

    # Nameed tuple to ease writing code
    FileInformation = namedtuple('FileInformation', ['file_path', 'file_name', 'last_modified'])

    # Loop through files in destination folder to collect information
    for dirpath, dirs, files in os.walk(os.path.join(ROOT_DIR, 'dest')):
        for file in files:
            # getting file path
            file_path = os.path.join(dirpath, file)
            # getting file change info and casting it to FileInformation type
            file_change_times_dest.append(FileInformation(file_path, file, os.stat(file_path).st_mtime))

    # Loop through source folder, same logic
    for dirpath, dirs, files in os.walk(os.path.join(ROOT_DIR, 'src')):
        for file in files:
            file_path = os.path.join(dirpath, file)
            file_change_times_src.append(FileInformation(file_path, file,os.stat(file_path).st_mtime))

    # Comparing the two, using Zip to combine the two lists into a tuple
    for file_comp in zip(file_change_times_dest, file_change_times_src):

        # Settings variables for 0 and 1 to make writing code easier
        _DEST = 0
        _SRC = 1

        # File comparison, to see if file name is the same, since we want to update
        if file_comp[_SRC].file_name == file_comp[_DEST].file_name:
            # If the last modified is greater for source, then we copy
            if file_comp[_SRC].last_modified > file_comp[_DEST].last_modified:
                shutil.copy(file_comp[_SRC].file_path, file_comp[_DEST].file_path)
                print("File moved")  # Just for checking

我希望这能解释一切。 You can get my exact same config from here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2023-03-18
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多