零基础 | 入门python06:python黑箱之输入与输出以及JSON序列

前言

对于编程语言,输入和输出近乎于人的手和腿,Python的输入和输出既独特又容易理解。我们需要了解输入输出的多种用法,熟练地掌握输入和输出对于日后的学习至关重要。(文字较为详细,文末有视频版
在这里插入图片描述

Python的输入和输出

为什么把它放到最开始说呢?

因为要借助计算机帮我们完成工作,必不可少的就是要实现人与计算机的交互,那如何实现两者的交互呢?便是数据的输入和输出。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

命令行的输入输出只是Python交互的最基本方式,是用一些简单小程序的交互,而生产级别的Python代码,大部分I\O则来自于文件、网络、其他进程的消息等等。

清楚NLP任务的基本步骤:
一、读取文件
二、去除所有标点符号和换行符,并把所有大写变成小写。
三、合并相同的词,统计每个词出现的频率,并按照词频从大到小排序。
四、将结果按行输出到文件out.TXT。

了解一下计算机中文件访问的基础知识。事实上,计算机内核对文件的处理相对比较复杂,涉及到内核模式、虚拟文件、系统锁和指针等一系列概念。

我们先要用open函数达到文件的指针,其中第一个参数指定文件位置,第二个参数如果是R,如果读取是W,则表示写入,当然也可以用RW,表示读写都要,A则是一个不太常用的参数,表示追加。这样打开的文件如果需要写入,会从原始文件的最末尾开始写入。

这里插一句如果在Facebook的工作中,代码权限管理非常重要,如果你只需要读取文件,就不要请求写入权限,这样在某种程度上可以降低bug对整个系统带来的风险。

在拿到指针后,我们可以通过read()函数来读取文件的全部内容。代码text=fin.read()函数即表示把文件所有内容读取到内存中,并复制给变量text。这么做自然有利有弊。

优点是方便,可以很方便的调用pass函数进行分析,缺点是如果文件过大,一次性读取可能造成内存崩溃。

这时我们可以给read函数指定参数set,用来表示读取的最大长度,还可以通过read line()函数每次读取一行。这种做法常用于数据挖掘中的数据清晰,在写一些小的程序时非常轻便。如果每行之间没有关联,这种做法也可以降低内存的压力。而write()函数可以把参数中的字符串输出到文件中,也很容易理解。

简单提一下with()语句。Open()函数对应于close()函数,也就是说,如果你打开了文件,在完成读取任务后就应该立刻关掉它。如果你使用了with语句,就不需要显示调用close()函数。在with的语境下,任务执行完毕后,Close()函数会被自动调用,代码也简洁很多。

最后需要注意的是,所有I\O都应该进行错误处理,因为I\O操作可能会有各种各样的情况出现,而一个健壮的程序需要能应对各种情况的发生,而不应该崩溃。

JSON序列化

JJSON是一种轻量级的数据交换格式,它的设计意图是把所有事情都用设计的字符串来表示,这样既方便在互联网上传递信息,也方便人进行阅读。JSON在当今互联网中应用非常广泛,也是每一个用Python程序员应当熟练掌握的技能点。

设想一个情景,你要向交易所购买一定数额的股票,那么你需要提交股票代码、方向、订单类型、价格、数量等一系列参数,而这些数据里有字符串,有整数、有浮点数,甚至还有布尔型变量,全部混在一起并不方便交易所解包。

而Jason正能解决这个场景,你可以把它简单理解为两种黑箱,
第一种,输入这些杂七杂八的信息,比如Python字典,输出一个字符串。
第二种,输入这个字符串可以输出包含原始信息的Python字典,

其中JSON.dumps()函数接受Python的基本数据类型,然后将其序列化为string。
而jason.loads()函数这个函数接收一个合法字符串,然后将其反序列化为Python的基本数据类型,

不过要记得加上错误处理,不然哪怕只是给jason.loads()函数发送了一个非法字符串,而你没有catch到,程序就会崩溃了。

如果要输出字符串到文件,或者从文件中读取Jason字符串,又该怎么办呢?
是的,你仍然可以使用上面提到的open()函数和read()和write(),先将字符串读取或者输出到内存,再进行JSON编码或者解码。当然这有点麻烦,
在这里插入图片描述

这样我们就简单清晰的实现了读写JSON字符串的过程。
当开发一个第三方应用程序时,你可以通过JSON将用户的个人配置输出到文件,方便下次程序启动时自动读取,这也是现在普遍运用的成熟做法。

那么Jason是唯一的选择吗?显然不是,它只是轻量级应用中最方便的选择之一。在谷歌有类似的工具,叫做Protocol buffer,不过,谷歌已经完全开源了这个工具,有兴趣的可以自己了解一下使用方法。

相比于JSON,它的优点是生成优化后的二进制文件,因此性能更好,但是与此同时生成的二进制序列是不能直接阅读的。它在tensorflow等很多对性能有要求的系统中都有广泛的应用。

总结

这里主要说了Python的普通I\O和文件I\O,同时了解了JSON序列化的基本知识,强调一下需要注意的几点,

1、I\O操作需谨慎,一定要进行充分的错误处理,并细心编码,防止出现编码漏洞。
2、编码时对内存占用和磁盘占用要有充分的估计,这样在出错时可以更容易找到原因。
3、JSON序列化是很方便的工具,要结合实战多多练习
4、代码尽量简洁清晰,哪怕是初学阶段,也有一颗当元帅的心。

Python的一些学习资料

Python的学习指南展示

在这里插入图片描述

👉Python学习路线汇总👈

围绕Python所有方向的技术点做的整理,以形成各个领域的知识点汇总,这样就可以按照上面的知识点去找对应的学习资源,保证学得较为全面。

👉Python必备开发工具👈

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉实战案例👈

边学边练是最高效的学习方法,这时候可以搞点实战案例来学习。

👉100道Python练习题👈

检查学习结果。

👉面试刷题👈


👉资料领取👈

这份完整版的Python全套学习资料已为大家备好,朋友们如果需要可以微信扫描下方二维码添加“住隔壁的王叔”,输入"领取资料" 可免费领取全套资料【有什么需要协作的还可以随时联系我】朋友圈也会不定时的更新最前言python知识。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值