Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-文件或文件夹内容版本控制_Python_Django_Version Control - Fatal编程技术网

Python-文件或文件夹内容版本控制

Python-文件或文件夹内容版本控制,python,django,version-control,Python,Django,Version Control,当作者写书时,我们使用CKEditor生成HTML内容。我们使用PythonDjango将这些内容存储到磁盘上一个单独的HTML文件中 但是现在,客户要求我们显示文件的历史记录/版本(每当作者按下ctrl+s时,边栏中的时间戳列表),就像Eclipse一样: 我计划使用diff,将存储在两个不同时间的html文本进行交集 但我不知道如何区分图像、音频和视频 你知道git、eclipse或Version控制系统是如何做到这一点的吗? 他们是否使用诸如SHA之类的编码将其存储在磁盘上 请建议我是否

当作者写书时,我们使用CKEditor生成HTML内容。我们使用PythonDjango将这些内容存储到磁盘上一个单独的HTML文件中

但是现在,客户要求我们显示文件的历史记录/版本(每当作者按下
ctrl+s
时,边栏中的时间戳列表),就像Eclipse一样:

我计划使用diff,将存储在两个不同时间的html文本进行交集

但我不知道如何区分图像、音频和视频

你知道git、eclipse或Version控制系统是如何做到这一点的吗? 他们是否使用诸如SHA之类的编码将其存储在磁盘上

请建议我是否可以使用任何其他方法来完成此操作

如果有任何开源python库可用,我已经准备好使用。我用谷歌搜索,但运气不佳。

试试这个(我为你写了一个课程):


注意:所以你可以问;如果我有我的文件地址,为什么我需要get_file_full_path()子函数?。。。因为你可以给这个类添加一个动态地址,比如“/myfile”和get\u file\u full\u path()将重新返回它的完整地址和最终地址。

那么,本质上,你是想重新实现git吗?@DeepSpace,但我们必须为一个用户会话存储它,就像可能最多4-6小时,并且只为一个HTML文件存储一样。但你知道HTML文件可能包含图像、音频、视频等链接,我认为git无法区分二进制文件。它只能检查文件是否已更改。有关在Python中比较文件的信息,请参阅模块。@Laxmikant:是否保存文件校验和?SHA不是编码!!这是一个杂烩!您不能将哈希值反转为其原始数据!我可以为你写。。您是指文件校验和(然后您可以将它们一起比较,校验和:创建时间、修改时间、文件散列、大小、路径等)?或者…?太棒了,非常感谢+1用于
get\u file\u full\u path
import os
import time
import hashlib


class SimpleFileCheckSum(object):

    def __init__(self, path):

        self.path = path
        self.output = {}

    def check_path_error(self):

        if os.path.exists(self.path) is True and os.path.isfile(self.path):
            return True
        else:
            return False

    def get_file_size(self):

        try:
            st_data = os.stat(self.path)
            get_size = str(st_data.st_size)

        except PermissionError:

            try:

                os_size_data = str(os.path.getsize(self.path))
                self.output["SIZE"] = os_size_data

            except:
                self.output["SIZE"] = "Error"

        else:
            self.output["SIZE"] = get_size

    def get_file_times(self):

        def convert_time_to_human_readable(get_time):

            return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(get_time))

        try:

            my_st_object = os.stat(self.path)

            file_creation_time = convert_time_to_human_readable(my_st_object.st_ctime)
            file_last_modified_time = convert_time_to_human_readable(my_st_object.st_mtime)

        except:
            self.output['TIMES'] = {"CREATION": "Error", "MODIFIED": "Error"}

        else:
            self.output['TIMES'] = {"CREATION": file_creation_time, "MODIFIED": file_last_modified_time}

    def get_file_full_path(self):

        try:

            get_full_path = os.path._getfullpathname(self.path)
            get_final_path = os.path._getfinalpathname(self.path)

        except:
            self.output['PATH'] = {"FULL": "Error", "FINAL": "Error"}

        else:
            self.output['PATH'] = {"FULL": get_full_path, "FINAL": get_final_path}

    def get_file_hashes(self):

        try:

            hash_md5 = hashlib.md5()
            hash_sha1 = hashlib.sha1()
            hash_sha256 = hashlib.sha256()
            hash_sha512 = hashlib.sha512()

            with open(self.path, "rb") as f:
                for chunk in iter(lambda: f.read(2 ** 20), b""):
                    hash_md5.update(chunk)
                    hash_sha1.update(chunk)
                    hash_sha256.update(chunk)
                    hash_sha512.update(chunk)

        except:
            self.output["HASH"] = {"MD5": "Error", "SHA1": "Error", "SHA256": "Error", "SHA512": "Error"}

        else:
            self.output["HASH"] = {"MD5": hash_md5.hexdigest(), "SHA1": hash_sha1.hexdigest(),
                                   "SHA256": hash_sha256.hexdigest(), "SHA512": hash_sha512.hexdigest()}

    def call_all(self):

        if self.check_path_error() is True:

            self.get_file_full_path()
            self.get_file_size()
            self.get_file_times()
            self.get_file_hashes()

            return self.output

        else:
            return {"Error": "Your Path is Not Valid"}


if __name__ == '__main__':

    file_info = SimpleFileCheckSum("Your_file_address")
    get_last_data = file_info.call_all()

    print("Your Raw Dict Output : ", get_last_data, "\n\n")