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…

指针强化练习(详解)

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

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

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

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

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

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

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

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

一、QDockWidget概述 QDockWidget 是 Qt 中的一个窗口部件&#xff0c;用于创建可停靠的窗口&#xff0c;通常用于构建多文档接口&#xff08;MDI&#xff09;或可定制的用户界面。QDockWidget 允许用户将窗口停靠在应用程序的主窗口周围&#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"> //实例化编辑器 …

2024.3.30学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p295-p314 super关键字 super代表父类的引用&#xff0c;用于访问父类的属性、方法、构造器 super细节和语法 访问父类的属性&#xff0c;但不能访问父类的private属性 super.属性名 访问父类的…

回溯算法|39.组合总和

力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex) {if (sum > target) {return;}if (sum target) {result.push_back…

Flutter(踩坑)之Android sdkmanager tool not found

D:\Flutter\flutter\bin\flutter.bat doctor --verbose [√] Flutter (Channel stable, v1.2.1, on Microsoft Windows [Version 10.0.22631.3296], locale zh-CN)• Flutter version 1.2.1 at D:\Flutter\flutter• Framework revision 8661d8aecd (5 years ago), 2019-02-14 …

【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?

目录 1 -> priority_queue的介绍和使用 1.1 -> priority_queue的介绍 1.2 -> priority_queue的使用 1.3 -> priority_queue的模拟实现 2 -> 容器适配器 2.1 -> 什么是适配器 2.2 -> STL标准库中stack和queue的底层结构 2.3 -> deque的介绍 2.…

Flutter 全局控制底部导航栏和自定义导航栏的方法

1. 介绍 导航栏在移动应用中扮演着至关重要的角色&#xff0c;它是用户与应用之间进行导航和交互的核心组件之一。无论是简单的页面切换&#xff0c;还是复杂的应用导航&#xff0c;导航栏都能够帮助用户快速找到所需内容&#xff0c;提升用户体验和应用的易用性。 在移动应用…

Mamba: Linear-Time Sequence Modeling with Selective State Spaces(论文笔记)

What can I say? 2024年我还能说什么&#xff1f; Mamba out! 曼巴出来了&#xff01; 原文链接&#xff1a; [2312.00752] Mamba: Linear-Time Sequence Modeling with Selective State Spaces (arxiv.org) 原文笔记&#xff1a; What&#xff1a; Mamba: Linear-Time …

进程等待+替换

✨MyShell实现✨ c并发编程&#xff08;书籍&#xff09; ✨进程等待  ✨wait/waitpid   ✨代码示例  ✨coredump   ✨什么是coredump   ✨开启coredump功能   ✨示例代码   ✨退出码 ✨进程替换  ✨原理  ✨进程替换接口一览  ✨实现一个shell  ✨myshell反思…