当前位置:网站首页 > C++编程 > 正文

py文件是什么意思(pyc文件是什么意思)



在实际开发中,常常需要对程序中的数据进行持久化操作,而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词,可能需要先科普一下关于文件系统的知识,对于这个概念,维基百科上给出了很好的诠释,这里不再浪费笔墨。

在Python中实现文件的读写操作其实非常简单,通过Python内置的函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件还是二进制文件)以及做什么样的操作(读、写还是追加),具体的如下表所示。

下面这张图来自于菜鸟教程网站,它展示了如果根据应用程序的需要来设置操作模式。

10 - Python文件编程和异常_数据

读写文本文件

读取文本文件时,需要在使用函数时指定好带路径的文件名(可以使用相对路径或绝对路径)并将文件模式设置为(如果不指定,默认值也是),然后通过参数指定编码(如果不指定,默认值是None,那么在读取文件时使用的是操作系统默认的编码),如果不能保证保存文件时使用的编码方式与encoding参数指定的编码方式是一致的,那么就可能因无法解码字符而导致读取失败。下面的例子演示了如何读取一个纯文本文件。

请注意上面的代码,如果函数指定的文件并不存在或者无法打开,那么将引发异常状况导致程序崩溃。为了让代码有一定的健壮性和容错性,我们可以使用Python的异常机制对可能在运行时发生状况的代码进行适当的处理,如下所示。

在Python中,我们可以将那些在运行时可能会出现状况的代码放在代码块中,在代码块的后面可以跟上一个或多个来捕获可能出现的异常状况。例如在上面读取文件的过程中,文件找不到会引发,指定了未知的编码会引发,而如果读取文件时无法按指定方式解码会引发,我们在后面跟上了三个分别处理这三种不同的异常状况。最后我们使用代码块来关闭打开的文件,释放掉程序中获取的外部资源,由于块的代码不论程序正常还是异常都会执行到(甚至是调用了模块的函数退出Python环境,块都会被执行,因为函数实质上是引发了异常),因此我们通常把块称为“总是执行代码块”,它最适合用来做释放外部资源的操作。如果不愿意在代码块中关闭文件对象释放资源,也可以使用上下文语法,通过关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源,代码如下所示。

除了使用文件对象的方法读取文件之外,还可以使用循环逐行读取或者用方法将文件按行读取到一个列表容器中,代码如下所示。

要将文本信息写入文件文件也非常简单,在使用函数时指定好文件名并将文件模式设置为即可。注意如果需要对文件内容进行追加式写入,应该将模式设置为。如果要写入的文件不存在会自动创建文件而不是引发异常。下面的例子演示了如何将1-9999直接的素数分别写入三个文件中(1-99之间的素数保存在a.txt中,100-999之间的素数保存在b.txt中,1000-9999之间的素数保存在c.txt中)。

读写二进制文件

知道了如何读写文本文件要读写二进制文件也就很简单了,下面的代码实现了复制图片文件的功能。

读写JSON文件

通过上面的讲解,我们已经知道如何将文本数据和二进制数据保存到文件中,那么这里还有一个问题,如果希望把一个列表或者一个字典中的数据保存到文件中又该怎么做呢?答案是将数据以JSON格式进行保存。JSON是“JavaScript Object Notation”的缩写,它本来是JavaScript语言中创建对象的一种字面量语法,现在已经被广泛的应用于跨平台跨语言的数据交换,原因很简单,因为JSON也是纯文本,任何系统任何编程语言处理纯文本都是没有问题的。目前JSON基本上已经取代了XML作为异构系统间交换数据的事实标准。关于JSON的知识,更多的可以参考JSON的官方网站,从这个网站也可以了解到每种语言处理JSON数据格式可以使用的工具或三方库,下面是一个JSON的简单例子。

可能大家已经注意到了,上面的JSON跟Python中的字典其实是一样一样的,事实上JSON的数据类型和Python的数据类型是很容易找到对应关系的,如下面两张表所示。

我们使用Python中的json模块就可以将字典或列表以JSON格式保存到文件中,代码如下所示。

json模块主要有四个比较重要的函数,分别是:

  • - 将Python对象按照JSON格式序列化到文件中
  • - 将Python对象处理成JSON格式的字符串
  • - 将文件中的JSON数据反序列化成对象
  • - 将字符串的内容反序列化成Python对象

这里出现了两个概念,一个叫序列化,一个叫反序列化。自由的百科全书维基百科上对这两个概念是这样解释的:“序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换为可以存储或传输的形式,这样在需要的时候能够恢复到原先的状态,而且通过序列化的数据重新获取字节时,可以利用这些字节来产生原始对象的副本(拷贝)。与这个过程相反的动作,即从一系列字节中提取数据结构的操作,就是反序列化(deserialization)”。

目前绝大多数网络数据服务(或称之为网络API)都是基于HTTP协议提供JSON格式的数据,关于HTTP协议的相关知识,可以看看阮一峰老师的《HTTP协议入门》,如果想了解国内的网络数据服务,可以看看聚合数据和阿凡达数据等网站,国外的可以看看{API}Search网站。下面的例子演示了如何使用requests模块(封装得足够好的第三方网络访问模块)访问网络API获取国内新闻,如何通过json模块解析JSON数据并显示新闻标题,这个例子使用了天行数据提供的国内新闻数据接口,其中的APIKey需要自己到该网站申请。

在Python中要实现序列化和反序列化除了使用json模块之外,还可以使用pickle和shelve模块,但是这两个模块是使用特有的序列化协议来序列化数据,因此序列化后的数据只能被Python识别。关于这两个模块的相关知识可以自己看看网络上的资料。另外,如果要了解更多的关于Python异常机制的知识,可以看看《总结:Python中的异常处理》,这篇文章不仅介绍了Python中异常机制的使用,还总结了一系列的最佳实践,很值得一读。

到此这篇py文件是什么意思(pyc文件是什么意思)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • pointnet(pointnet和pointnet++区别)2025-03-30 08:54:06
  • libc.so是什么(lib.so是什么文件)2025-03-30 08:54:06
  • localdatetime工具类(localdatetime怎么用)2025-03-30 08:54:06
  • cn xsa是哪个港口(cnsha是哪个港口)2025-03-30 08:54:06
  • 烟草jc是哪里的码(jhyc是哪里的烟草代码)2025-03-30 08:54:06
  • ip138.cm查询网手机号码查吉凶(手机号码测吉凶ip138)2025-03-30 08:54:06
  • 怎么删除创建的虚拟环境(anaconda怎么删除创建的虚拟环境)2025-03-30 08:54:06
  • console接口可以当网口用吗(console口能上网吗)2025-03-30 08:54:06
  • cjson库使用(c++ jason库)2025-03-30 08:54:06
  • com串口线(串口线console)2025-03-30 08:54:06
  • 全屏图片