专栏首页玄魂工作室如何学python 第十九课 文件操作

如何学python 第十九课 文件操作

今天我们来说说文件操作。文件操作在程序编写里有着举足轻重的作用。文件操作,主要包含文件的输入和输出。学会了文件操作,就可以写出更符合实际需求的脚本。

我会先介绍两种主要的I/O模式,然后介绍一下文件的手动opening和closing。最后,介绍更加自动化的操作方式。

两种主要I/O操作

有好多方式进行文件I/O操作。不过,最常使用的还是其中的两种。一种是读文件(‘r’),另一种是写文件(‘w’)。这两个操作的含义就是字面意思,从文件读数据和向文件写数据。

注意

标准的写操作会把文件覆盖(这意味着原有的文件内容会丢失),我们在后面的文章里会介绍如何做到这一点。

手动文件I/O操作

当我们进行文件I/O操作的时候,最好别用这种方式进行文件操作。举例来说,错误的关闭文件可能会导致一些严重的错误。虽然这不是推荐的操作,但是却很适合用来入门。

我们首先演示写文件。(此演示在linux下进行)首先创建一个叫做file的文件,然后在里面写上(只是用文本编辑器打开和写入)”Hello,Null Byte!”.

现在我们有了个文件。在进行文件写操作的时候,首先要在python里打开这个文件。这个过程会建立一个对象,所以我们需要用一个变量把这个对象存进去。在例子中,我们用变量‘file’来存贮这个对象。

当我们打开文件的时候,需要使用open()函数,并对传入文件路径和要进行什么样的文件操作。看例子:

我们此时已经通过只读方式打开了文件。现在来通过打印变量file的内容来看看到底读到了什么:

我们可以看到除了读到文件内容之外,还有一行空白。这其实是换行符\n。现在我们成功的读到了文件,一定一定要记得把文件关上。如果不关闭文件,就会导致一些错误,文件也可能会被损坏。我们可以用.close()方法来关闭文件对象。

现在,我们已经成功的打开、读、关闭了文件。下面来试试写文件。

写文件只要把open()的第二个参数换成’w’就可以了。向文件‘file’中写入”Hello,world!\n”:

记得手动加上\n,然后是文件的关闭操作。现在再看看文件里的内容:

好了,这就是手动操作文件的全部内容。

自动文件I/O操作

‘自动’,意味着不再需要手动打开或者关闭文件。我们可以用with关键字和as关键字来打开和关闭文件。这么做的格式是

with open(‘文件路径’,‘操作方式’) as 存储文件的变量名

你可能注意到提示符的样子从>>>变成了… 这是因为使用with和as关键字的时候,所有的io操作都必须在with/as的body部分里。

这样就不用手动关闭文件了。下面演示一下写操作:

现在来看看文件写进去了没:

下面继续open函数的其他参数。不同的参数会以不同的方式操作文件。如果你的学习能力够强,就应该在看到这个函数的第一时间去了解它的各个参数的含义,传入不同参数的作用、返回值等等情况。了解了这些基本信息,使用起来也就没什么问题了。在上一篇介绍文件操作的文章里,我们给出了很多操作文件的方式,但是没有给出具体的解释,只是让有兴趣的同学自己试试看。这节来详细介绍一下上次没介绍的几种文件操作模式。

r+方式:这种方式既可以读文件又可以写文件,但是是分开单独进行的。

rb方式:这种方式以二进制方式读文件。

wb方式:这种方式以二进制方式写文件。

在演示文件操作之前,需要先创建一个文件:

额外提一嘴,这里的环境依旧是kali。我们先用touch命令创建了一个叫做test的文件,然后有用cat 命令向文件写入了一些内容。cat << EOF > test这行命令的含义是,打开test文件,向test文件内写入接下来你输入的内容(可以是多行),并在遇到’EOF’这个东西的时候保存内容并关闭test文件。注意,这个’EOF’可以是其他任何的东西,这里的eof虽然也意味着end of file,却并不是我们传统意义上的那个真正的文件结束标记。另外,这个标记不会被保存到文件中。好了,书归正传,继续说python下的文件操作方式。

r+模式

r+模式也可以叫做’拓展读模式’。我们就用之前说的as with的方法来演示。

这里用到了一个新的方法,readlines().read,读。lines,行,而且是个复数形式,多行。其实从字面意思来看就可以知道这是什么意思。readlines可以按行读取文件,并且以行为单位,返回一个list对象。

print一下通过读文件读到的内容:

再看看写文件是不是写进去了:

二进制读/写模式

以二进制的方式读取文件和写入文件,在日常编程中 并不是很常见。然而,在某些特殊情况下(比如加密/解密等),二进制读写是非常有用的。

为了举例子,我们先创建一个目标文件。事实上,任意一个其他的文件也可以被拿来做实验,无论你的系统是什么。这里,我简单的创建一个可执行文件,然后用这个可执行文件做实验:

由于这是一个python文章,所以关于文件创建过程,我就不多说什么了。

然后,使用rb模式读文件->把读到的东西放进test变量里->输出test变量:

执行print之后,我们会发现输出了一大堆莫名其妙根本看不懂的东西。没关系,我们不懂无所谓,系统懂就行了。。。

输出的内容:

我们唯一能看懂的基本上就是那句Hello world了。

也许你觉得这个东西没有卵用,其实还是有点用的。那我举个例子好了。不知道大家还记不记得许多年前有个工具叫灰鸽子,当时江湖上出现了各种各样xxx专版灰鸽子,看起来屌屌的,好像真的是重新开发版一样。

然而并不是这样的。

事实上相当多的改版灰鸽子都是用类似的方式,查字段,改字段,然后就没了。甚至连重新编译都没有。。。。

当然了,除了用来装逼,它还有很多别的用处。这节课我们姑且讲基础,不说太深入。但是千万别觉得没有卵用——把枪交给一个不会开枪的人,犹如一堆废铁。能怪枪没有卵用吗?并不能。

好了,开始说二进制写。

使用二进制写文件->打开新创建的文件test2->把刚才读出来的test写到test2里。

改权限,执行(因为是linux下所以需要改一下权限):

可以看到,test2和test完全一样。

总结

今天说的这几样里,平时使用频率最高的就是r+模式了。在进行大量的读写文件操作的时候,这个模式相当的有用。后面那两种虽然不常用,但却也有其无可替代的地方。当然,更可能的情况是,当你在别人写的代码里看到了这个东

本文分享自微信公众号 - 玄魂工作室(xuanhun521),作者:玄魂工作室李三思

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-08-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何学python

    第十六课 基础文件操作 今天我们来说说文件操作。文件操作在程序编写里有着举足轻重的作用。文件操作,主要包含文件的输入和输出。学会了文件操作,就可以写出更符合实际...

    用户1631416
  • 利用Png做持久型XSS攻击

    关于文件上传漏洞,其实是老生常谈了,其实很多网站都做了很严格的控制。这里我们不去谈如何突破文件上传,而是假设我们能上传一张图片,然后当成html嵌入或者执行。 ...

    用户1631416
  • 怎样学Python之第十九课 高级文件输入和输出

    欢迎回来!如果您还记得以前的几次培训课程,我们介绍了基本的文件I/O。 这是使我们的脚本适用于现实生活场景中的一个非常重要的步骤,今天我们将要深入这些概念。 我...

    用户1631416
  • python: IO操作

    JNingWei
  • python文件打开的几种访问模式

    于小勇
  • 操作系统 文件管理 概述

    计算机的主要功能之一就是对数据进行数值或非数值计算。系统软件必须提供数据存储、数据处理、数据管理的基本功能。数据管理是通过文件管理的方式来完成的,而目录又是建立...

    Debug客栈
  • python爬虫系列之 requests实战:用 requests库下载网页和图片

    在上一节我们讲过,响应 Response的 content属性可以用来下载文件,但是我并没有讲怎么实现。

    渔父歌
  • C语言的学习

     r  只读  rb只读  r+ rb+(不带b的为已存在的文本文件,带b的为二进制文件(binary),带+号的为读写文件)

    LhWorld哥陪你聊算法
  • [零] JavaIO入门简介 程序设计语言 为什么需要IO库

    本文旨在引申出来Java IO的概念含义,作为学习JavaIO一个起步的了解知识点

    noteless
  • CTF解题技能之MISC基础

    杂项题目主要是以文件附件作为题目,但是给的文件不一定是有后缀名的,这就需要我们识别这些文件

    漏斗社区

扫码关注云+社区

领取腾讯云代金券