python实验2

一、实验目的

  1. 掌握不同文件类型的读写
  2. 掌握目录遍历的方法
  3. 掌握json解析器的设计与实现
    二、实验内容
  4. 读取文件内容
  5. 素数写入文件
  6. 输出文件目录
  7. 读写json文件
  8. 实现json解析器
    三、实验环境
    在Educoder平台进行实验
    四、实验要求
    根据每个实训的每个关卡要求完成代码提交和测评
    五、 实验步骤
    1.读取文件内容
    常见的编码,utf-8,ascii,Unicode……
    根据题目信息,utf-8为默认的编码,文件测试可以用utf-8为测试进行检测
    然后使用对文件管理的操作
    打开,读写模式的选择
    根据要求进行判断
    在这里插入图片描述

2.素数写入文件
Open函数给出正确的路径即可以对我们的文件进行操作
最开始先三个文件,进行赋值
然后根据循环进行判断
判断素数
在这里插入图片描述

3.输出文件目录
文件目录输出的方式有很多种,我个人认为最简单,方式就是用os.walk
但是这个题目
根据题目信息,然后看到
题目只根据它的规定导入库里的函数
这里用递归的思想
如果是文件夹,那就继续调用自身
然后进行遍历
然后输出
在这里插入图片描述

4.读写json文件
Json文件,这是java设计的一种方式
打开测试集里看看book.txt长什么样子
根据json文件的格式,需要你每次输出,书名:XXXX,价钱:xxxx
这样的方式
我们可以先把title提取出来然后,就是先把第一行先读取和去掉
然后对后面三行进行遍历
注意输出的结构是字典,所以会用zip,dict函数
但最后输出是在列表里面

在这里插入图片描述

5.实现json解析器
这道题代码,较长,得从开头慢慢看
首先是参数
单看这个肯定是很难懂,但是往往python的官方文档,里面都会在前面加上注释,这也就是代码,写好注释的习惯
此部分定义了一个名为 Enum 的枚举(尽管它被自定义类名覆盖)来表示 JSON 字符串中可以找到的不同类型的令牌。每个令牌类型都有一个相应的整数值
在这里插入图片描述
在这里插入图片描述

全局变量:
• json_index: 此全局变量用于跟踪正在解析的 JSON 字符串中的当前位置
token_parse 函数:
此函数将 JSON 字符串和当前索引作为输入,并返回包含已解析令牌和新索引的元组。它使用一系列辅助函数来处理不同的令牌类型:
• read_num: 此函数从 JSON 字符串中读取数字并返回类型为 NUMBER_TOKEN 的令牌。
• read_str: 此函数从 JSON 字符串中读取字符串并返回类型为 STRING_TOKEN 的令牌。它处理字符串中的转义双引号。
• read_null: 此函数检查字符串 “null” 并返回类型为 NULL_TOKEN 的令牌。
• read_bool: 此函数检查字符串 “true” 或 “false” 并返回类型为 BOOL_TOKEN 的
tokenizer 函数:
• 此函数将 JSON 字符串作为输入并返回令牌列表。它逐个字符迭代 JSON 字符串,调用 token_parse 函数获取下一个令牌并将其附加到列表中。该过程一直持续到 JSON 字符串结束(由 END_JSON 令牌指示)。
generate_token 函数:
• 此函数将令牌类型和令牌值作为输入,并返回表示令牌的元组。此函数可能由其他函数内部使用来创建令牌。
generate_tokenlist 函数:
此函数将令牌列表和令牌作为输入,并将令牌附加到列表中。此函数可能由其他函数内部使用来构建令牌列表。
parse_json 函数:
此函数将令牌列表作为输入,并将其解析为表示 JSON 对象的 Python 数据结构(字典或列表)。它使用两个辅助函数:
• parse_json_array: 此函数处理解析 JSON 数组。它迭代令牌列表并期望令牌如 BEGIN_ARRAY, END_ARRAY, 逗号和表示数组中值的令牌。它构建一个 Python 列表来表示 JSON 数组。
• parse_json_object: 此函数处理解析 JSON 对象。它迭代令牌列表并期望令牌如 BEGIN_OBJECT, END_OBJECT, 冒号、逗号和表示对象中键和值的令牌。它构建一个 Python 字典来表示 JSON 对象。
main 块:
• 当程序直接运行时,此块是程序的入口点。它提示用户输入,读取原始 JSON 数据,调用 tokenizer 函数获取令牌列表,然后调用 parse_json 函数解析令牌并将它们转换为 Python 数据结构。然后将解析后的数据结构打印到控制台。

六、问题记录和实验总结(必写)
首先,第一个问题,对于文件处理的方式,有几种,在实际中,其实应该选择自己最熟悉,以及最便捷,通俗易懂的方式进行,我个人而言,对于文件路径,更喜欢os.walk,而不是需要自己遍历然后判断,除此之外,对于文件操作,文件的格式往往是不一样的,很多的文件采用的编码方式,肯定是不同的,python处理的文件需要哪一种,需要我们自己取确定好,这样才不容易报错

了解文件格式是很重要的一点,对于json文件,其实他适用于客户端,和服务器之间的便捷,还有很多文件结构,对典型的就是我们现在大部分Windows的PE文件,而其实文件结构的内容,主要关联的部分是操作系统,操作系统对文件的处理方式

JSON 是一种简单、易读、易于解析的格式,非常适合于数据交换和存储简单的数据结构。但是,对于需要存储复杂数据结构或需要类型检查和安全性的应用程序,JSON 可能不是最佳选择

通过这次实验,还是去看了一下json的文件结构
JSON 文件的二进制格式由以下几个部分组成:
• 文件头: 文件头包含有关 JSON 文件的元信息,例如文件格式版本和字符编码。
• 对象: 对象由键值对组成,键和值都以二进制形式存储。
• 数组: 数组是有序的元素列表,元素可以是任何 JSON 数据类型。
• 基本数据类型: 基本数据类型以二进制形式存储,例如字符串以 UTF-8 编码存储,数字以 IEEE 754 浮点数格式存储。
• 空值: 空值以特殊字节表示

JSON 文件与 PE 文件和 ELF 文件的对比

JSON、PE 和 ELF 都是文件格式,但它们用于不同的目的:

  • JSON: JSON 是一种轻量级的数据交换格式,易于阅读和解析,常用于 Web 开发、数据存储和配置文件等领域。
  • PE: PE 是 Windows 操作系统可执行文件的格式,用于存储程序代码和资源。
  • ELF: ELF 是 Linux 和其他 Unix 操作系统可执行文件的格式,用于存储程序代码和资源。

以下是 JSON、PE 和 ELF 文件的详细对比:

特性JSONPEELF
用途数据交换可执行文件可执行文件
格式文本二进制二进制
可读性易于阅读难以阅读难以阅读
可解析性易于解析难以解析难以解析
支持的平台跨平台WindowsLinux 和 Unix
安全性无内置安全机制支持安全机制支持安全机制
复杂性简单复杂复杂

JSON 与 PE/ELF 文件的比较:

  • JSON 是文本格式,易于阅读和解析,但 PE/ELF 是二进制格式,难以阅读和解析。
  • JSON 适用于数据交换,PE/ELF 适用于存储程序代码和资源。
  • JSON 不支持安全性,PE/ELF 支持安全机制。
  • JSON 比较简单,PE/ELF 比较复杂。

总结:

JSON、PE 和 ELF 文件都是重要的文件格式,但它们用于不同的目的。选择哪种文件格式取决于您的具体需求。

以下是一些与 JSON、PE 和 ELF 文件相关的其他问题:

  • 如何使用 JSON 解析库解析 JSON 文件?
  • 如何使用 PE/ELF 解析器解析 PE/ELF 文件?
  • 如何使用 JSON 生成器生成 JSON 文件?
  • 如何使用 PE/ELF 编辑器编辑 PE/ELF 文件?

如果您还有其他问题,请随时问我。

参考资料:

  • JSON 官方网站: https://json.org/
  • PE 文件格式: https://en.wikipedia.org/wiki/Portable_Executable
  • ELF 文件格式: https://en.wikipedia.org/wiki/Executable_and_Linkable_Format

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网实战--入门篇之(五)嵌入式-IIC驱动(SHT30温湿度)

目录 一、IIC简介 二、IIC驱动解析 三、SHT30驱动 四、总结 一、IIC简介 不管是IIC还是串口,亦或SPI,它们的本质区别在于有各自的规则,就是时序图;它们的相同点就是只要你理解了时序图,你就可以用最普通的IO引脚模…

RAG:检索增强生成系统如何工作

随着大型语言模型(LLM)的发展,人工智能世界取得了巨大的飞跃。经过大量数据的训练,LLM可以发现语言模式和关系,使人工智能工具能够生成更准确、与上下文相关的响应。 但LLM也给人工智能工程师带来了新的挑战&#xff…

SRS OBS利用RTMP协议实现音视频推拉流;WebRTC 屏幕直播分享工具

一、SRS OBS利用RTMP协议实现音视频推拉流 参考:https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started 1)docker直接运行SRS服务: docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.co…

Chrome浏览器隐藏的截图功能配置及使用

来自实用又方便,轻松打开Chrome浏览器隐藏的截图功能!​​​​​​​ 一、通过谷歌Chrome浏览器 现在直接通过谷歌Chrome浏览器内置功能,免安装扩充插件也可以实现Chrome的截图和长截图功能了! 也不需要额外安装任何截图工具 &a…

蓝桥杯习题

https://www.lanqiao.cn/problems/1265/learning/ 第一题---排序 给定一个长度为N的数组A,请你先从小到大输出它的每个元素,再从大到小输出他的每个元素。 输入描述: 第一行包含一个整数N 第二行包含N个整数a1,a2,a3,...an,表…

Leaflet使用多面(MultiPolygon)进行遥感影像掩膜报错解决之道

目录 前言 一、问题初诊断 1、山重水复 2、柳暗花明 3、庖丁解牛 4、问题定位 二、解决多面掩膜问题 1、尝试数据修复 2、实际修复 3、最终效果 三、总结 前言 之前一篇讲解遥感影像掩膜实现:基于SpringBoot和Leaflet的行政区划地图掩膜效果实战&#xff0…

EtherCAT主站SOEM -- 23 -- EtherCAT从站的状态机控制和状态详细解析

EtherCAT主站SOEM -- 23 -- EtherCAT从站的状态机控制和状态详细解析 0 QT-SOEM视频预览及源代码下载:0.1 QT-SOEM视频预览0.2 QT-SOEM源代码下载一 AL 状态机:二 EtherCAT 从站控制器的 AL 状态码描述三 状态机运行该文档修改记录:总结上下博客链接0 QT-SOEM视频预览及源代…

统计二叉树中好节点的数目-树1448-c++

用一个vector来记录遍历到某一节点后&#xff0c;它的路径上的所有结点值&#xff0c;只要当前节点值比它们都大&#xff0c;则为好节点。遍历顺序为前序遍历&#xff0c;因为是从根节点往下&#xff0c;每个子节点都能拿到它的路径节点值。 #include <algorithm>/*** D…

Python 二进制

1、二进制规律 1. 与运算&#xff08;AND&#xff09;&#xff1a;a & b 当且仅当a和b的相应位都为1时&#xff0c;结果的相应位才为1&#xff0c;否则为0。2、 或运算&#xff08;OR&#xff09;&#xff1a;a | b 只要a或b的相应位中至少有一个为1&#xff0c;结果的相…

vue js金额转中文

在Vue.js项目中&#xff0c;实现金额转中文的功能通常涉及编写一个JavaScript方法来处理数字转换逻辑&#xff0c;并在Vue组件中调用该方法。下面是一个基本的示例&#xff0c;展示如何在Vue组件中定义一个计算属性或方法来实现这一功能&#xff1a; /*** 思路&#xff1a; …

深入理解 JavaScript 中的变量声明:var、let 和 const

目录 1. var 2. let 3. const 4. 区别 在 JavaScript 中&#xff0c;变量的声明是一项基本的操作&#xff0c;而在 ES6&#xff08;ECMAScript 2015&#xff09;之后&#xff0c;引入了两个新的关键字 let 和 const&#xff0c;使得变量声明的方式更加灵活和可控。下面介绍…

指针强化练习(详解)

更多学习内容 结构体内存对齐 和 位段-CSDN博客指针初级&#xff08;基础知识&#xff09;-CSDN博客指针进阶(深入理解)-CSDN博客 目录 1.sizeof与strlen的区别 2.一维数组 3.字符指针 4.二维数组 5.指针运算(笔试题) 6.函数指针 1.sizeof与strlen的区别 请思考以下运行结…

安装即启动?探索流氓App的自启动“黑科技” (Android系统内鬼之ContentProvider篇)

前段时间发现了一个神奇的app&#xff0c;它居然可以在安装之后立即自启动&#xff1a; 看到没有&#xff0c;在提示安装成功大概1到2秒后&#xff0c;就直接弹出Toast和通知了&#xff01; 好神奇啊&#xff0c;在没有第三方app帮忙唤醒的前提下&#xff0c;它是怎么做到首次安…

C++2D原创我的世界1.00.3版本上市!!!

我很郁闷&#xff0c;为什么就是整不了昼夜交替啊喂&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 虽然这看上去很简单&#xff0c;但做起来要我命&#xff01;&#xff01;&#xff01; 优化过后总共1312行&#xff0c…

DOM 节点遍历:掌握遍历 XML文档结构和内容的技巧

遍历是指通过或遍历节点树 遍历节点树 通常&#xff0c;您想要循环一个 XML 文档&#xff0c;例如&#xff1a;当您想要提取每个元素的值时。 这被称为"遍历节点树"。 下面的示例循环遍历所有 <book> 的子节点&#xff0c;并显示它们的名称和值&#xff1a;…

低代码与系统集成:革新企业应用开发的新动力

随着信息技术的不断发展&#xff0c;企业应用开发的需求也日益增长。为满足这一需求&#xff0c;低代码与系统集成逐渐崭露头角&#xff0c;成为推动企业数字化转型的重要力量。本文将从低代码的概念、优势&#xff0c;以及其与系统集成的结合等方面进行探讨&#xff0c;以期为…

Qt主窗口 之:停靠/悬浮窗口(QDockWidget)

一、QDockWidget概述 QDockWidget 是 Qt 中的一个窗口部件&#xff0c;用于创建可停靠的窗口&#xff0c;通常用于构建多文档接口&#xff08;MDI&#xff09;或可定制的用户界面。QDockWidget 允许用户将窗口停靠在应用程序的主窗口周围&#xff0c;或将其拖动到独立的浮动窗…

pytorch常用的模块函数汇总(2)

目录 torch.utils.data&#xff1a;数据加载和处理模块&#xff0c;包括 Dataset 和 DataLoader 等工具&#xff0c;用于加载和处理训练数据。 torchvision&#xff1a;计算机视觉模块&#xff0c;提供了图像数据集、转换函数、预训练模型等&#xff0c;用于计算机视觉任务。 …

门控循环单元(GRU)

概述 门控循环单元&#xff08;Gated Recurrent Unit, GRU&#xff09;由Junyoung Chung等人于2014年提出&#xff0c;原论文为《Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling》。GRU是循环神经网络&#xff08;Recurrent Neural Network, …

实现富文本的三部曲

1、引入 ueditor.config.js ueditor.all.min.js lang/zh-cn/zh-cn.js 2、编辑器显示处 id"content" <textarea id"content" name"content"></textarea> 3、底部 <script type"text/javascript"> //实例化编辑器 …