精华内容
下载资源
问答
  • 2020-12-29 02:36:00

    “红头文件”是指我国党政机关发布的除法律、法规以外的其他的文件,由于这些文件都是采用红色字体印刷完成,所以被称为“红头文件”。本文是学习啦小编为大家整理的公司红头文件格式范文,仅供参考。

    公司红头文件格式范文篇一:

    关于落实《各级管理人员安全生产责任制》的通 知

    各项目经理部:

    为认真贯彻执行《建筑法》、《建筑施工安全检查标准》及现行安全生产相关法律、标准、规范,顺利完成本年度安全生产责任目标,确保工程安全生产、文明施工。公司特制定《各级管理人员安全生产责任制》、现下发给你们,望认真贯彻执行。

    附:《各级管理人员安全生产责任制》

    xx年x月x日

    公司红头文件格式范文篇二:

    (宋体三号字空两行)

    大连华翔建设集团有限公司文件

    (宋体三号字空两行)

    华翔发〔20xx〕1号 (居中仿宋三号字)

    (宋体三号字空两行)

    关于××××××

    的通知(宋体2号字)

    (宋体三号字空一行)

    各有关部门: (正文包括附件、日期均为仿宋3号字)

    ××××××××××××××××××××××××××××××××××××××××××。

    ××××××××××××××××××××××××××××××××××××××××××。

    ××××××××××××。

    ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××。

    (宋体三号字空一行)

    附件:1.关于×××××××的通知

    2.关于××××××××××××××××××××××××××的通知

    3.印章使用规定

    xx年x月x日

    (宋体三号字空一行)

    附注

    (主题词黑体三号字)

    主题词:××××××通知 (宋体3号字)

    报送:××,×××,××,×××,××××,××,× ××,×××。(仿宋三号字)

    抄送:××,×××,××,×××,××××,××

    公司红头文件格式范文篇三:

    xxx有限公司

    苏华发〔20xx〕023号

    关于召开xx区域营销工作交流研讨会议的通知

    xx区域各分公司、办事处:

    为了进一步推进xx区域的营销工作,带动全国市场的发展壮大,确保年度计划的顺利实施,经研究决定召开一次xx区域的营销工作交流研讨会议。现将会议的具体事项通知如下:

    一、主办单位:本次会议由xxx有限公司南京分公司邀请和主办。

    二、会议时间:20xx年9月24日~25日,共两天。与会人员需在9月23日下午到南京分公司安排的会场报到。

    三、会议地点:南京分公司杨总正在落实,届时电话通知。

    四、出席对象:xx区域所有分公司、办事处的全体工作人员。请各分公司、办事处务必在9月15日上午之前将出席会议的人数报公司市场部,便于安排会场及食宿。

    五、会议主题:业务研讨交流及技能培训提升。

    六、会议材料:各分公司、办事处应根据会议的主题,准备一份有质量的文字材料,并打印15份与会交流。

    以上通知,希即执行!

    xxx有限公司

    xx年x月x日

    公司红头文件格式范文篇四:红头文件任命书(模板)

    XXXXXX有限责任公司

    文 件

    XXX总字(XXXX)第00X号

    人 事 任 命 书

    根据公司经营发展需要,决定对XX同志进行新的人事任命,现予以公布:

    任命XX为XXX有限责任公司企划部主管,负责公司XX部日常管理工作。

    此任命自发布之日起生效。

    总经理签名:

    签 章:

    日 期:20xx年x月x日

    主题词:XXXX 人事任命 通知 主 送:XXXXX

    抄 送:XXXX XXX公司 XXXX年X月XX日印发

    公司红头文件格式范文篇五:公司内部红头文件

    xxxx有限公司文件

    xxxx(****)* 号

    关于***************的决定

    各部门、各公司:

    东方城置地股份有限公司

    年 月 日

    抄送:董事长、总裁、各副总裁

    经办:*******部 ****年**月**日

    印发 共**份

    公司红头文件格式范文篇六:

    ********公司文件

    宁同字〔xxxx〕第003号

    关于员工考勤管理制度实行的通知

    各部门:

    为规范和加强公司各部门员工上下班时间及请假等考勤管理,为准确核算工资提供依据,我公司现制定《*******公司员工考勤管理制度》,请公司全体员工认真学习,严格执行。 特此通知

    附 件 :《 ******公 司 员工考勤管理制度》

    20xx年x月x日

    主送:总经理

    抄送:财务部 人事部 项目部

    共印4份(归档1份)

    看了公司红头文件格式范文的人还看了:

    更多相关内容
  • 文件格式是在文件中存储信息的一种标准方法。首先,文件格式指定文件是一个二进制或ASCII文件。其次,文件展示了文件的组织形式。例如,逗号分隔值(CSV)文件格式存储在纯文本的表格数据。image.png2、为什么数据科学...

    Author:kevinelstri

    DateTime:2017/3/13

    1、什么是文件格式?

    文件格式是在文件中存储信息的一种标准方法。首先,文件格式指定文件是一个二进制或ASCII文件。其次,文件展示了文件的组织形式。例如,逗号分隔值(CSV)文件格式存储在纯文本的表格数据。

    image.png

    2、为什么数据科学家需要懂得不同的文件格式?

    通常,你遇到的文件都取决于你使用的应用。例如,在一个图像处理系统中,你需要将图像文件作为输入输出,所以你会看到一个JPEG,GIF或PNG格式。

    作为数据科学家,你需要了解各种文件格式的底层结构以及它们的优缺点等。除非你了解了数据的底层结构,否则你不能够去探索它。而且,有时你需要决定怎么去存储数据。

    选择最佳的文本格式来存储数据可以提高你的模型在数据处理中的性能。

    3、使用python如何读取不同的文件格式?

    3.1 csv

    CSV格式属于电子表格文件格式。

    那么什么是电子表格文件格式呢?

    在电子表格文件格式中,数据存储在单元格中。每个单元格按照行和列结构进行组织。电子表格中的列可以有不同的数据类型。例如,一列可以是字符串类型,日期类型或整数类型。最流行的电子表格文件格式就是CSV格式,xls格式和xlsx格式。

    CSV中的每一行代表一个观察,通常称为一条记录。每个记录可以包含一个或多个由逗号分隔的字段。

    有时,你可能会看到文件中不使用逗号分隔,但是使用制表符进行分隔,这样的文件格式称为TSV(制表符分隔值)文件格式。

    下面是将CSV文件使用Notepad打开的结果:

    image.png

    import pandas as pd

    pf = pd.read_csv('train.csv')

    3.2 XLSX

    xlsx是微软Excel打开XML文件格式,它也是电子表格文件格式,它是基于XML格式创建的Excel。xlsx数据是在一个表的单元格和列下组织的,每一个xlsx文件可以包含多于一个的表格,因此工作簿可以包含多个表。

    下面的图像显示一个“xlsx文件是微软Excel打开:

    image.png

    在上面的图像中,你可以看到文件中存在多个表,包含客户、雇员、发票和订单,图像显示的数据只有一个表-“发票”。

    import pandas as pd

    pf = pd.read_excel('train.xlsx',sheetname = 'invoice')

    3.3 ZIP

    zip格式是存档文件格式。

    在归档文件格式中,创建一个包含多个文件以及元数据的文件。归档文件格式用于将多个数据文件收集到一个文件中。这样做是为了简单地压缩文件,使用更少的存储空间。

    有许多流行的计算机数据存档格式创建归档文件。ZIP,RAR和Tar是最流行的基于数据压缩的存档文件格式。

    所以,一个ZIP文件格式是一种无损压缩格式,这意味着如果你使用zip格式压缩多个文件,解压缩后,可以完全恢复数据。zip文件格式使用许多压缩算法压缩文档。您可以轻松地识别ZIP文件的ZIP扩展名。

    import zipfile

    archive = zipfile.ZipFile('T.zip', 'r')

    df = archive.read('train.csv')

    3.4 TXT纯文本格式

    在纯文本文件格式,一切都写在纯文本。通常,这个文本是非结构化的,并且没有与它相关的元数据。txt格式的文件可以很容易地通过任何程序进行读取。但是通过计算机程序来编译是非常困难的。

    举一个简单的文本文件示例,下面的示例显示包含文本的文本文件数据:

    “In my previous article, I introduced you to the basics of Apache Spark, different data representations

    (RDD / DataFrame / Dataset) and basics of operations (Transformation and Action). We even solved a machine

    learning problem from one of our past hackathons. In this article, I will continue from the place I left in

    my previous article. I will focus on manipulating RDD in PySpark by applying operations

    (Transformation and Actions).”

    text_file = open("text.txt", "r")

    lines = text_file.read()

    3.5 JSON

    Javascript对象符号(JSON)是一个基于文本的开放标准的数据交换网络设计。JSON格式用于在网上传输结构化数据。JSON格式的文件可以很容易地使用任何编程语言来读取,因为它是独立于语言的数据格式。

    以一个JSON文件为实例,下面显示了一个典型的JSON文件存储信息的员工信息:

    {

    "Employee": [

    {

    "id":"1",

    "Name": "Ankit",

    "Sal": "1000",

    },

    {

    "id":"2",

    "Name": "Faizy",

    "Sal": "2000",

    }

    ]

    }

    读取JSON文件:

    import pandas as pd

    df = pd.read_json('train.json')

    3.6 XML

    XML也称为可扩展标记语言。顾名思义,它是一种标记语言。它具有一定的编码数据规则。XML文件格式是一个人类可读和机器可读的文件格式。XML的自描述性语言设计用于通过Internet发送信息。XML是HTML非常相似,但有一些差异。例如,XML不使用预定义的标签为HTML。

    以XML文件格式的简单例子,下面显示了一个 XML文档,包含一个员工的信息:

    Ankit

    Anlytics Vidhya

    +9187654321

    读取XML文件:

    import xml.etree.ElementTree as ET

    tree = ET.parse('/home/sunilray/Desktop/2 sigma/train.xml')

    root = tree.getroot()

    print root.tag

    3.7 HTML

    HTML代表超文本标记语言,它是用于创建网页的标准标记语言,HTML是用来描述网页结构使用的标记。HTML标签类似于XML但是是预定义的。可以很容易地识别的HTML文档分段标签,如

    代表HTML文档的标题,
    “HTML段落段落”,并且HTML是不区分大小写的。

    下面显示一个HTML文档:

    Page Title

    My First Heading

    My first paragraph.

    读取HTML文件:

    使用BeautifulSoup库来读取HTML文件,参考:使用BeautifulSoup进行网络爬虫

    3.8 images

    图像文件可能是数据科学中最迷人的文件格式。任何计算机视觉中的应用是基于图像处理过程的,所以有必要了解不同的图像文件格式。

    常见的图像文件是三维的,有RGB值。但是,他们也可以是二维(灰度)或四维(有强度),图像是由像素和与其相关的元数据构成的。

    每个图像由一个或多个像素帧组成,每个帧是由二维数组的像素值,像素值可以是任何强度。元数据与图像是相关的,可以是一个图像类型(PNG)或像素尺寸。

    读取png图片:

    from scipy import misc

    f = misc.face()

    misc.imsave('face.png', f) # uses the Image module (PIL)

    import matplotlib.pyplot as plt

    plt.imshow(f)

    plt.show()

    如果想阅读关于图像处理的文章,可以参考:基于python的图像处理基础

    3.9 HDF

    在分层数据格式(HDF),您可以很容易存储大量的数据。它不仅用于存储高容量或复杂的数据,而且还用于存储小体积或简单的数据。

    使用HDF的优点:

    它可用于各种规模和类型的系统

    它具有灵活,高效的存储和快速I/O.

    多格式支持HDF

    现在有多个HDF格式。但是,HDF5是最新的版本,它用来解决一些老的HDF文件格式的限制。HDF5格式与XML相似,像XML,HDF5文件都是自描述的,允许用户指定复杂的数据关系和依赖关系。

    以一个HDF5文件格式为例,可以识别以.h5为扩展的文件:

    image.png

    读取HDF5文件:

    import pandas as pd

    df = pd.read_hdf('train.h5')

    3.10 PDF

    PDF(Portable Document Format)是通过结合图形来解释和文本显示的格式结合,一个PDF文件的特点在于它可以通过密码保护。

    image.png

    安装pdfminer库:

    python setup.py install

    读取PDF文件:

    pdf2txt.py train.pdf # 测试读取pdf

    3.11 docx

    微软Word的docx文件是另一种文件格式,它是基于文本的数据组织的。它有许多特点,如表格的内联加法,图像、超链接等,这有助于在一个非常重要的文件格式。

    docx文件对于PDF文件,具有的优点就是docx文件是可编辑的。你也可以把docx文件转换成任何其他格式。

    image.png

    安装docx2txt库:

    pip install docx2txt

    读取docx文件:

    import docx2txt

    text = docx2txt.process("file.docx")

    3.12 mp3

    MP3文件格式来自于多媒体文件格式,多媒体文件格式类似于图像文件格式,但它们恰好都是最复杂的文件格式。

    在多媒体文件格式中,您可以存储各种数据,如文字图像,图形,视频和音频数据。例如,一个多媒体格式可以允许文本被存储为富文本格式(RTF)的数据而非ASCII数据,这是一个纯文本格式。

    MP3是一种最常见的音频编码格式的数字音频。一个MP3文件格式采用的MPEG-1编码格式为视频和音频压缩标准。在有损压缩中,一旦压缩原始文件,则无法恢复原始数据。

    一个MP3文件格式过滤掉人类无法听到的声音,压缩了音频的质量。MP3压缩通常减小达到75%至95%,从而节省了大量的空间。

    一个MP3文件有许多框架。框架可以进一步分为标题和数据块。我们称这些序列的框架是基本流。

    在MP3的头部,找出有效的框架和一个数据块的开始包含(压缩)在频率和振幅的音频信息。

    下面是MP3文件结构:下载

    image.png

    读取多媒体文件格式:

    参考:PyMedia

    3.13 mp4

    MP4文件格式用于存储视频和电影。它包含多幅图像(称为帧),从而起到在一个视频形式为每一个特定的时间。两种方法来解释mp4,一个是一个封闭的实体,其中整个视频被认为是一个单一的实体。另一个是马赛克的图像,其中在视频中的每个图像被认为是作为一个不同的实体,这些图像从视频进行采样。

    image.png

    读取MP4文件:

    参考:MoviePy

    from moviepy.editor import VideoFileClip

    clip = VideoFileClip(‘.mp4’)

    参考文献

    展开全文
  • 按文档文本、文件日期、附件名称或数量、标题... 从PDF文档属性或基于内容动态创建存储位置(存储文件夹) 通过电子邮件自动发送PDF文件(也带有附加附件) 将嵌入的PDF附件存储在任何文件夹中以进行存档 定期发送或...
  • 事实上,我们在上一部教程 HelloDjango - Django博客教程(第二版)的 页面侧边栏:使用自定义模板标签 已经讲解了如何获取归档日期列表,只是当时返回的归档日期列表直接用于模板的渲染,而这里我们需要将归档日期...

    作者:HelloGitHub-追梦人物[1]

    文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库[2]

    我们的博客有一个侧边栏功能,分别列出博客文章的分类列表、标签列表、归档时间列表,通过点击侧边栏对应的条目,还可以进入相应的页面。例如点击某个分类,博客将跳转到该分类下全部文章列表页面。这些数据的展示都需要开发对应的接口,以便前端调用获取数据。

    分类列表、标签列表实现比较简单,我们这里给出接口的设计规范,大家可以使用前几篇教程中学到的知识点轻松实现(具体实现可参考 GtiHub 上的源代码)。

    分类列表接口:/categories/

    标签列表接口:/tags/

    归档日期列表的接口实现稍微复杂一点,因为我们需要从已有文章中归纳文章发表日期。事实上,我们在上一部教程 HelloDjango - Django博客教程(第二版)的 页面侧边栏:使用自定义模板标签 已经讲解了如何获取归档日期列表,只是当时返回的归档日期列表直接用于模板的渲染,而这里我们需要将归档日期列表序列化后通过 API 接口返回。

    具体来说,获取博客文章发表时间归档列表的方法是调用查询集(QuerySet)的 dates 方法,提取记录中的日期。核心代码就一句:

    Post.objects.dates('created_time', 'month', order='DESC')
    

    这里 Post.objects.dates 方法会返回一个列表,列表中的元素为每一篇文章(Post)的创建日期(已去重),日期都是 Python 的 date 对象,精确到月份,降序排列。

    有了返回的归档日期列表,接下来就实现相应的 API 接口视图函数:

    blog/views.py
    
    
    from rest_framework import mixins, status, viewsets
    from rest_framework.decorators import action
    from rest_framework.serializers import DateField
    
    
    class PostViewSet(
        mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
    ):
      # ...
    
    
        @action(
            methods=["GET"], detail=False, url_path="archive/dates", url_name="archive-date"
        )
        def list_archive_dates(self, request, *args, **kwargs):
            dates = Post.objects.dates("created_time", "month", order="DESC")
            date_field = DateField()
            data = [date_field.to_representation(date) for date in dates]
            return Response(data=data, status=status.HTTP_200_OK)
    

    注意这里我们涉及到了几个以前没有详细讲解过的用法。

    一是 action 装饰器,它用来装饰一个视图集中的方法,被装饰的方法会被 django-rest-framework 的路由自动注册为一个 API 接口。

    回顾一下我们之前在使用视图集 viewset 时提到过 action(动作)的概念,django-rest-framework 预定义了几个标准的动作,分别为 list 获取资源列表,retrieve 获取单个资源、update 和 partial_update 更新资源、destroy 删除资源,这些 action 具体的实现方法,分别由 mixins 模块中的混入类提供。例如 用类视图实现首页 API 中我们介绍过 mixins.ListModelMixin,这个混入类提供了 list 动作对应的标准实现,即 list 方法。视图集中所有以上提及的以标准动作命名的方法,都会被 django-rest-framework 的路由自动注册为标准的 API 接口。

    django-rest-framework 默认只能识别标准命名的视图集方法并将其注册为 API,但我们可以添加更多非标准的 action,而为了让 django-rest-framework 能够识别这些方法,就需要使用 action 装饰器进行装饰。

    其实我们可以简单地将 action 装饰的方法看作是一个视图函数的实现,因此可以看到方法传入的第一个参数为 request 请求对象,函数体就是这个视图函数需要执行的逻辑,显然,方法最终必须要返回一个 HTTP 响应对象。

    action 装饰器通常用于在视图集中添加额外的接口实现。例如这里我们已有了 PostViewSet 视图集,标准的 list 实现了获取文章资源列表的逻辑。我们想添加一个获取文章归档日期列表的接口,因此添加了一个 list_archive_dates 方法,并使用 action 进行装饰。通常如果要在视图集中添加额外的接口实现,可以使用如下的模板代码:

    @action(
        methods=["allowed http method name"], 
        detail=False or True, 
        url_path="url/path", 
        url_name="url name"
    )
    def method_name(self, request, *args, **kwargs):
        # 接口逻辑的具体实现,返回一个 Response
    

    通常 action 装饰器以下 4 个参数都会设置:

    methods:一个列表,指定访问这个接口时允许的 HTTP 方法(GET、POST、PUT、PATCH、DELETE)

    detail:True 或者 False。设置为 True,自动注册的接口 URL 中会添加一个 pk 路径参数(请看下面的示例),否则不会。

    url_path:自动注册的接口 URL。

    url_name:接口名,主要用于通过接口名字反解对应的 URL。

    当然,我们还可以在 action 中设置所有 ViewSet 类所支持的类属性,例如 serializer_classpagination_classpermission_classes 等,用于覆盖类视图中设置的属性值。

    以上是 action 用法的一个基本介绍,现在来分析一下 list_archive_dates 这个 action 来加深理解。

    methods 参数指定接口需要通过 GET 方法访问,detail 为 Falseurl_path 设置为 archive/dates,因此最终自动生成的接口路由就是 /posts/archive/dates/。如果我们设置 detail 为 True,那么生成的接口路由就是 /posts/<int:pk>/archive/dates/,生成的 URL 中就会多一个 pk 路径参数。

    list_archive_dates 具体的实现逻辑中,以下几点需要注意:

    一是独立使用序列化字段(Field)。之前序列化字段都是在序列化器(Serializer)里面使用的,因为通常来说接口需要序列化一个对象的多个字段。而这个接口中只需要序列化一个时间字段(类型为 Python 标准库中的 datetime.date),所以没必要单独定义一个序列化器了,直接拿 django-rest-framework 提供的用于序列化时间类型的 DateField 就可以了。用法也很简单,实例化序列化字段,调用其 to_representation 方法,将需要序列化的值传入即可(其实序列化器在序列对象的多个字段时,内部也是分别调用对应序列化字段的 to_representation  方法)。

    我们通过列表推导式生成一个序列化后的归档日期列表,这个列表是可被序列化的。接着我们在接口返回一个 ResponseResponse 将序列化后的结果包装返回(保存在 data 属性中),django-rest-framework 会进一步帮我们把这个 Response 中包含的数据解析为合适的格式(例如 JSON)。

    status=status.HTTP_200_OK 指定这个接口返回的状态码,HTTP_200_OK 是一个预定义的常数,即 200。django-rest-framework 将常用 HTTP 请求的状态码常数预定义 status 模块里,使用预定义的变量而不是直接使用数字的好处一是增强代码可读性,二是减少硬编码。

    由于 PostViewSet 视图集已经通过 django-rest-framework 的路由进行了注册,因此 list_archive_dates 也会被连带着自动注册为一个接口。启动开发服务器,访问 /posts/archive/dates/,就可以看到返回的文章归档日期列表。

    注意到红框圈出部分,django-rest-framework API 交互后台会识别到额外定义的 action 并将它们展示出来,点击就可以进入到相应的 API 页面。

    现在,侧边栏所需要的数据接口就开发完成了,接下来实现返回某一分类、标签或者归档日期下的文章列表接口。

    在 使用视图集简化代码 我们开发了获取全部文章的接口。事实上,分类、标签或者归档日期文章列表的 API,本质上还是返回一个文章列表资源,只不过比首页 API 返回的文章列表资源多了个“过滤”,只过滤出了指定的部分文章而已。对于这样的场景,我们可以在请求 API 时加上查询参数,django-rest-framework 解析查询参数,然后从全部文章列表中过滤出查询所指定的文章列表再返回。

    这在 RESTful API 的设计中肯定是会遇到的,因此第三方库 django-filter 帮我们实现了上述所说的查询过滤功能,而且和 django-rest-framework 有很好的集成,我们可以在 django-rest-framework 中非常方便地使用 django-filter。

    既然要使用它,当然是先安装它(已安装跳过):pipenv install django-filter

    接着我们来配置 PostViewSet,为其设置用于过滤返回结果集的一些属性,代码如下:

    from django_filters.rest_framework import DjangoFilterBackend
    from .filters import PostFilter
    
    
    class PostViewSet(
        mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
    ):
        # ...
        filter_backends = [DjangoFilterBackend]
        filterset_class = PostFilter
    

    非常的简单,仅仅设置了 filter_backendsfilterset_class 两个属性。其中 filter_backends 设置为 DjangoFilterBackend,这样 API 在返回结果时, django-rest-framework 会调用设置的 backend(这里是 DjangoFilterBackend) 的 filter 方法对 get_queryset 方法返回的结果进行进一步的过滤,而 DjangoFilterBackend 会依据 filterset_class(这里是 PostFilter)中定义的过滤规则来过滤查询结果集。

    当然 PostFilter 还没有定义,我们来定义它。首先在 blog 应用下创建一个 filters.py 文件,用于存放自定义 filter 的代码,PostFilter 代码如下:

    from django_filters import rest_framework as drf_filters
    
    
    from .models import Post
    
    
    
    
    class PostFilter(drf_filters.FilterSet):
        created_year = drf_filters.NumberFilter(
            field_name="created_time", lookup_expr="year"
        )
        created_month = drf_filters.NumberFilter(
            field_name="created_time", lookup_expr="month"
        )
    
    
        class Meta:
            model = Post
            fields = ["category", "tags", "created_year", "created_month"]
    

    PostFilter 的定义和序列化器 Serializer 非常类似。

    categorytags 两个过滤字段因为是 Post 模型中定义的字段,因此 django-filter 可以自动推断其过滤规则,只需要在 Meta.fields 中声明即可。

    归档日期下的文章列表,我们设计的接口传递 2 个查询参数:年份和月份。由于这两个字段在 Post 中没有定义,Post 记录时间的字段为 created_time,因此我们需要显示地定义查询规则,定义的规则是:

    查询参数名 = 查询参数值的类型(查询的模型字段,查询表达式)

    例如示例中定义的 created_year 查询参数,查询参数值的类型为 number,即数字,查询的模型字段为 created_time,查询表达式是 year。当用户传递 created_year 查询参数时,django-filter 实际上会将以上定义的规则翻译为如下的 ORM 查询语句:

    Post.objects.filter(created_time__year=created_year传递的值)
    

    现在回到 API 交互后台,先进到 /post/ 接口下,默认返回了全部文章列表。可以看到右上角多了个过滤器(红框圈出部分)。

    点击会弹出过滤参数输入的交互面板,在这里可以交互式地输入查询过滤参数的值。

    例如选择如下的过滤参数,得到查询的 URL 为:

    http://127.0.0.1:10000/api/posts/?category=1&tags=1&created_year=2020&created_month=1

    这条查询返回创建于 2020 年 1 月,id 为 1 的分类下,id 为 1 的标签下的全部文章。

    通过不同的查询参数组合,就可以得到不同的文章资源列表了。

    参考资料

    [1]HelloGitHub-追梦人物: https://www.zmrenwu.com

    [2]HelloGitHub-Team 仓库:https://github.com/HelloGitHub-Team/HelloDjango-REST-framework-tutorial

    关注公众号加入交流群

    『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎联系我(微信:xueweihan,备注:讲解)加入我们,让更多人爱上开源、贡献开源~

    往期回顾:

    第 8 篇:内容支持 Markdown 语法,接口返回包含解析后的 HTML

    第 7 篇:文章详情的 API 接口

    第 6 篇:分页接口

    “阅读原文”获取更多信息、“在看”让本文被更多人看到、“赞赏”支持我们。

    展开全文
  • ZIP(32位)文件格式详解

    2022-01-01 22:22:17
    ZIP文件格式详解

    ZIP(32位)文件格式详解

    为什么要去了解ZIP文件格式

    最近有个需求,需要加载jar包中的jar包中的class,此时有两种方式:

    • 1、将jar解压缩,然后将解压缩后的路径添加到class path,这样就不存在嵌套jar的读取方式了,tomcat就是采用的这种方式;
    • 2、不解压缩jar,直接定位到jar包中的jar包中的class,然后将其数据抽离出来,将其解析为class注册到系统中去(可以利用ClassLoader的defineClass方法实现),spring-boot就是采用的这种方式;

    最终我们决定使用第二种方案(解压可能会导致我们的环境污染,多出来许多文件),即不解压缩jar包,而这就需要我们深入了解jar包的格式,由于jar包就是ZIP格式的,所以要实现该功能必须得了解ZIP格式,这样才能从中抽取我们需要的数据;

    ZIP文件设计

    。ZIP文件是存储多个文件的存档。ZIP允许使用许多不同的方法压缩包含的文件,以及简单地存储文件而不压缩它。每个文件都单独存储,允许使用不同的方法压缩同一存档中的不同文件。由于 ZIP 存档中的文件是单独压缩的,因此可以提取它们或添加新文件,而无需对整个存档应用压缩或解压缩。

    ZIP文件有一个目录,记录了ZIP文件中的各个文件的位置以及大小等信息,目录放置在 ZIP 文件的末尾。这允许ZIP读取器加载文件列表,而无需读取整个ZIP存档。ZIP 存档还可以包含与 ZIP 存档无关的额外数据。这允许将ZIP存档预置到ZIP存档中并将文件标记为可执行文件,从而将ZIP存档制作成自解压存档(解压缩其包含数据的应用程序)。将目录存储在末尾还可以通过将压缩文件附加到无害的文件(如 GIF 图像文件)来隐藏压缩文件。

    个人理解:ZIP文件的这种特性也就意味着我们不仅仅可以在前边放置自解压程序,还可以防止一些渗透攻击程序,也就是说ZIP文件可能是不安全的,别人可能用一个ZIP文件来攻击我们;

    ZIP文件格式

    ZIP文件通常由以下五部分组成:

    • local file header(每个文件对应一个)
    • data(文件实际数据,可能压缩,也可能未压缩)
    • data descriptor(条件存在)
    • central directory file header(中央目录,每个文件一条记录)
    • end of central directory record(后续简称 EOCD 全局只有一个)

    当我们将多个文件压缩为一个ZIP包时,多个文件在ZIP包中是分别存储的,每个文件都会生成一个entry,entry包括最前边的 local file header 、中间的data(实际的文件数据,可能被压缩了,也可能没压缩)以及末尾的data descriptor(这个是有条件的存在,后续会介绍);所有文件组成的entry存储完毕后生成 central directory file header ,每个文件都会对应一个 central directory file header ,所有的 central directory file header 结束后会添加一个 EOCD ,这个是一个ZIP文件只有一个;

    最终我们的ZIP文件存储结构如下: 

    ZIP文件各个部分详细说明

    local file header定义

    offsetbytesdescription
    04local file header签名,固定值:0x04034b50
    42提取本文件需要的最低版本号
    62标志位,如果第三个bit被设置了(0x08),表示写入的时候不知道数据大小和CRC-32,则该entry包含data descriptor部分
    82压缩方法,0表示本entry没有压缩,只是归档到ZIP中了,0x08表示使用了DEFLATE算法压缩
    102文件最后修改时间
    122文件最后修改日期
    144文件压缩前的CRC-32
    184文件压缩后的大小,单位byte(如果是0xffffffff则表示是ZIP64文件,我们暂时不关心ZIP64,因为目前jar基本都是ZIP32的)
    224文件压缩前的大小,单位byte(如果是0xffffffff则表示是ZIP64文件)
    262文件名长度,单位byte,这表示我们的文件名长度不能超过65535 byte,并且这里的文件名是包含前边的目录的
    282扩展字段长度,单位byte(这个我们暂时并不关心,所以无需去解析)
    30n文件名
    30 + nm扩展字段

    从这个local file header定义可以看出local file header实际上是变长的,并不是定长的(因为文件名和扩展字段长度都是不固定的);

    data descriptor

    如果entry的local file header的标志位第三个bit被设置了(0x08),表示写入的时候不知道数据大小和CRC-32,则该entry包含本部分;

    offsetbytesdescription
    04签名,固定值:0x08074b50
    44文件压缩前的CRC-32
    84文件压缩后的大小,单位byte
    124文件压缩前的大小,单位byte

    central directory file header

    每个entry都有一个central directory file header记录,central directory file header中的大部分信息都是冗余的local file header(或者data descriptor)中的信息,然后就是entry的定位信息,主要就是为了根据中央目录快速定位entry,而不用读取完整的整个文件去查找某个文件,这在早期磁盘较小(意味着一个ZIP文件可能存储于多个磁盘)、读取速度较慢的场景下极为有用,相当于索引;

    offsetbytesdescription
    04签名,固定值:0x02014b50
    42制作于那个ZIP版本
    62解析该目录需要的最低版本号,与对应entry的local file header中的值一致
    82一般标志位,与对应entry的local file header中的值一致
    102压缩方法,与对应entry的local file header中的值一致
    122文件最后修改时间,与对应entry的local file header中的值一致
    142文件最后修改日期,与对应entry的local file header中的值一致
    164文件压缩前的CRC-32
    204文件压缩后大小
    244文件压缩前大小
    282文件名长度(n),与对应entry的local file header中的值一致
    302扩展字段长度(m),与对应entry的local file header中的值一致
    322文件备注长度(k)
    342文件起始位置所在的磁盘编号(这个用于zip跨磁盘的场景,在早期磁盘(软盘)是很小的,所以一个zip文件可能会跨多个磁盘,而现在基本不太可能出现这种场景了)
    362内部文件属性
    384外部文件属性
    424本目录指向的entry相对于第一个entry的起始位置,单位byte,这也就限制了ZIP文件最大也就是4G了,再大就无法定位了
    46n文件名
    46+nm扩展字段
    46+n+mk文件备注

    EOCD

    标志ZIP文件结束,判断一个文件是否是ZIP格式的文件就是读取文件末尾的EOCD来判断,而不是像其他文件一样读取文件头来判断;

    offsetbytesdescription
    04签名,固定值:0x06054b50
    42占用磁盘数(0xffff表示是ZIP64格式)
    62中央目录的起始位置所在的磁盘
    82当前磁盘上的中央目录记录数
    102中央目录的总数量(0xffff表示是ZIP64格式),这限制了一个ZIP32文件中存储的文件数最多不能超过65534个
    124中央目录的总大小(单位byte),(0xffffffff表示这是一个ZIP64文件)
    164中央目录相对于ZIP文件第一个entry的起始位置(注意,不是ZIP文件,是ZIP文件的第一个entry,这是一个细微的差别,在大多数场景下都是可以忽略的,但是如果ZIP文件头包含一些前缀数据,例如自解压程序时,这个起始位置是包含这些前缀数据的,而zip的第一个entry是在这些前缀数据之后,如果不关注这个细节可能会导致ZIP解析失败)
    202备注长度
    22n备注

    回到我们的需求

    由于我们采用了第二种方式,所以我们需要能从ZIP中抽取我们需要的数据,而根据上述ZIP规范描述ZIP的中央目录设计正好能满足我们的需求,剩下的就是如何实现的问题了,下面说下大概思路(如果需要具体实现代码可以参考spring-boot-loader中的相关代码):

    根据ZIP规范,我们读取一个ZIP时应该从后读取,先读取到EOCD来确定这是一个ZIP文件,同时根据EOCD来定位到中央目录,然后读取中央目录,根据中央目录构建索引,找到我们要读取的文件,由于我们是需要读取嵌套jar,所以也需要对嵌套jar构建索引,所以我们找到嵌套jar后还需要嵌套解析,最后类加载的时候根据索引来查找类数据;

    这里有一个关键性的问题,当我们把索引构建完毕后,如果类加载的时候发现一个jar是在嵌套jar中,并且该嵌套jar是以压缩的方式存储在ZIP文件中,那么我们就需要对整个jar进行解压缩,否则我们是无法定位到嵌套jar中的class数据的,此时解压嵌套jar就存在两种策略了:一个就是我们将嵌套jar解压缩后缓存到内存,下次需要加载该jar中的class的时候直接从内存中取数据,可能这个嵌套jar中有几百个class,而只有两三个class是我们需要的,这样会导致内存浪费,还有一个就是我们每次需要从该嵌套jar中加载class的时候重新解压缩该嵌套jar,这就会导致我们的class加载极为耗CPU,同时也会导致类加载比较缓慢;

    那么上述问题该如何解决呢?我们发现,导致上述问题的原因就是因为嵌套jar是压缩存储在ZIP中的,那么如果嵌套jar是未压缩的呢?如果嵌套jar只是存储在ZIP中,但是并未压缩,那么我们可以直接使用偏移量定位到嵌套jar中的class数据,就不会存在上述问题了,而实际上spring-boot也是这样解决这个问题的;

    至此,我们的需求就解决了,而再此过程中我们也学到了很多 非(并)常(无)有(卵)用(用) 的知识;

    参考文献

    展开全文
  • 数据库备份生成bak文件格式

    千次阅读 2021-01-19 19:45:44
    文章 leshami 2013-10-15 611浏览量 windows下oracle数据库自动备份脚本 1、根据日期自动生成 Oracle 备份文件 @echo off echo 正在备份Oracle数据库,请稍等...... exp userid='用户名/密码@SID' file=D:\bak\res_...
  • logback 日志输出格式

    千次阅读 2019-09-24 10:36:13
    【前言】 日志对一个系统的重要性不言而喻;日志通常是在排查问题时给人看,一个友好的...下面为大家共享一下通过设置logback日志输出格式,打印出令人欣喜的日志样式。 【搞一下日志格式】 一、未指定日志格...
  • shell归档与备份

    2017-10-29 15:52:50
    归档程序: tar – 磁带打包工具 zip – 打包和压缩文件 还有文件同步程序: rsync – 同步远端文件和目录 压缩文件[hjw@localhost ~]$ less hjw.txt [hjw@localhost ~]$ ls -l hjw.txt -rw-rw-r--. 1 hjw hjw 1054 ...
  • 本文档描述了在不安装连通性选件包的情况下将WinCC归档变量导出到Excel文件的三种方法,供参考。  WinCC的过程值归档数据是通过算法进行了压缩处理的,一般情况,要读取出WinCC的归档变量数据,需安装连通..
  • 归档类和地理数据库历史查看器可用做解决此问题的工具,所以数据归档功能也常被称为历史归档。Esri公司从ArcGIS 9.2版本之后就增加了Geodatabase 数据模型的历史库功能。 在国土行业中,用户经常会要求按年、季度、...
  • 标准库 Python拥有一个强大的...文件处理,包含文件操作、创建临时文件文件压缩与归档、操作配置文件等功能  3.操作系统功能,包含线程与进程支持、IO复用、日期与时间处理、调用系统函数、日志(logging)等功能
  • 文件格式是在文件中存储信息的一种标准方法。首先,文件格式指定文件是一个二进制或ASCII文件。其次,文件展示了文件的组织形式。例如,逗号分隔值(CSV)文件格式存储在纯文本的表格数据。 2、为什么数据科学家...
  • Linux 压缩及归档工具详解常用工具压缩工具gzip / gunzip / zcatbzip2 / bunzip2 / bzcatxz / unxz / xzcat归档工具tar1、创建归档2、展开归档3、查看归档文件和文件列表4、归档压缩工具zcf / zxfjcf / jxfJcf / ...
  • 日期 内核版本 架构 作者 GitHub CSDN 2016-06-04 Linux-4.5 X86 & arm ...对象文件格式对象文件首先,你需要知道的是所谓对象文件(Object files)有三个种类: 可重定位的对象文件(Relocatable file)
  • 有关GNSS的数据文件的下载地址、命名方式介绍。
  • 原文转载于:https://blog.csdn.net/kevinelstri/article/details/61921812Author:kevinelstri DateTime:2017/3/13译文:How to read most commonly used file formats in ...1、什么是文件格式? 文件格式是在...
  • JAR 文件规范详解

    千次阅读 2020-09-04 18:41:29
    奇技 · 指南JAR文件是基于ZIP文件格式的一种文件格式,用来将许多文件整合成一个文件。一个JAR文件本质上是包含可选目录META-INF的zip文件,可以通过命令行jar工具或者在J...
  • linux文件管理命令

    2020-12-20 00:49:34
    linux上的文件管理类命令文件描述符:在linux中,内核通过inode来找到每个文件,但一个文件可以被许多用户同时打开或一个用户同时打开多次。这就有一个问题,如何管理文件的当前位移 量,因为可能每个用户打开文件后...
  • >自动安装大多数软件的分发归档文件 >添加/查看评论在归档 >通过双击到在文件列表中的文件,它的开通与关联到这个文件类型的程序 >检查特征 >创建一个自解压存档 >电子邮件归档 >检查是否有新的更新 >内建多语言支持...
  • C++Builder文件操作大全

    千次阅读 2019-04-02 08:57:34
    C++Builder文件操作大全 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1、基于C的文件操作; 2、基于C++的...
  • Linux 命令之 rar -- 压缩/解压文件

    千次阅读 2021-06-02 09:25:40
    命令 rar 可以将文件或者目录压缩打包成以 .rar 为后缀名的压缩包,该命令需要安装 rarlinux 才能使用。 子命令 命令 说明 a 添加文件到压缩文件 c 添加压缩文件注释 cf 添加文件注释 cw 写入压缩文件...
  • 前言 ...以我们平常使用的Windows系统的计算机为例,其上有很多不同类型的文件有很多,如常见的txt(文本)、jpg(图片)、mp3(音频),flv(视频)格式等等。 而Linux系统上同样也有很多不同类型...
  • 禁用固实压缩文档 sc[obj] 指定字符集 sfx[name] 创建 SFX 压缩文档 si[name] 从标准输入读取数据 (stdin) sl 处理小于指定大小的文件 sm 处理大于指定大小的文件 t 压缩后测试 ta 处理在 之后修改的文件日期格式为...
  • tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在...
  • 文件的有关操作

    2022-03-21 19:25:49
    第7-8次课:文件的有关操作 查找文件:find、locate、grep find find:在目录结构中查找文件,遍历硬盘 find [路径] [参数] [关键字] 参数: -name:按照名字查找 -user:文件属主来查找 -group:文件所属组来查找 -...
  • 压缩就是将没有使用到的空间丢出来,让文件的占用空间变小 解压缩就是将压缩完的数据还原成未压缩的状态 压缩是指压缩后与压缩前的文件所占用磁盘空间的大小比值 当存放数字1的时候,根据二级制计数,存放的是...
  • 创建分区和文件系统

    千次阅读 2020-07-01 21:36:25
    在本文中,了解磁盘分区和Linux文件系统。 学会: 创建一个分区 使用mkfs命令设置ext2,ext3,ext4,xfs,Reiser v3和vfat文件系统 创建和管理交换空间 本文可帮助您为Linux Professional Institute的...
  • Java快速入门-06-JDK 目录文件说明

    千次阅读 2018-10-21 21:35:14
    JDK:开发环境,搞技术的人或者应用...JDK目录文件如下: bin:存放java启动命令以及其他开发工具命令(如javac),该目录应保存到PATH变量中 &amp;amp;amp;nbsp; &amp;amp;amp;nbsp; &amp;amp;amp;nbsp

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,967
精华内容 4,786
关键字:

归档文件日期标准格式