python基础--用python来读写文件(一)
一、文件读写说明
1、简介
为什么要使用python来读写文件呢?我直接在我的电脑中打开文件,一目了然,想改哪里改哪里,so easy,为什么要废这功夫?
当然,如果你只是读写个别文件,直接在文件中操作比较省事。但我们在这里讨论的是对大数据进行分析,你总不能把我们需要的数据一个一个复制粘贴吧,那我们就需要使用python来自动的读写文件。
2、文件读写的步骤
在使用python进行文件读写之前,我们先来回忆一下通常是怎么操作这些文件的。比如你在更改论文内容时,是不是先把这个论文.doc文件打开,改掉你不喜欢的内容,然后保存、关闭。
那么用python来读写文件也是一样的流程。也要分以下三个步骤:
(1)打开文件
我们知道python的一个强大之处就在于,它为我们内置了大量的函数、方法、库,可以供我们直接使用。这里python内置了一个方法叫做open(),用于打开文件。其基本语法格式是:
f=open(‘文件路径.后缀’,‘操作模式’)
举个例子:myfile=open(‘c:\mm.txt’,‘r’),这个命令就是以只读的方式打开文件。
这里面open()的返回值是一个file对象,就是说等号右边这一部分是一个文件对象。
等号左边这个f是我们随意选的名字,是一个变量。
那我们把右边这个文件对象赋值给f之后,它就变成了一个文件句柄。什么意思呢?文件句柄,你可以把他想象成一个保姆,打开文件之后,把文件交给他了,他不给你,你让他读文件,他就读文件,你让他写文件,他就写文件。
请看下面这个例子,在ipython中敲这么一行代码,以a模式打开一个不存在的文件,就会自动在文件夹中新建此文件。
【注意】:命令中的斜杠最好用‘/’,不要用‘\’,因为后者很容易被误识成转义符,有时候会报错。
(2)读写文件
那么怎么来命令这个文件句柄呢?这里的格式是f.命令(),例如f.read(),f.write()等等,这些我们在后面再进行介绍。
这里附上常用的打开txt文件的模式:
模式 | 说明 | 指针初始位置 | 如果文件不存在 |
---|---|---|---|
r | 以只读的方式打开文件 | 文件开头 | 报错 |
w | 打开一个文件写入内容。注意:这种模式是从头写入,会覆盖之前已有的内容 | 文件开头 | 创建 |
a | 与w一样是写入文件。不同之处在于它不是从头写入,而是在已有文件后面接着写 | 文件结尾 | 创建 |
rb | 和r基本相同,不同之处在于以二进制的格式打开文件 | 文件开头 | 报错 |
wb | 和w基本相同,不同之处在于以二进制的格式打开文件 | 文件开头 | 创建 |
ab | 和a基本相同,不同之处在于以二进制的格式打开文件 | 文件结尾 | 创建 |
除此之外还有它们分别对应的r+、w+、a+、rb+、wb+,ab+,不同之处在于这几种都是可读可写的操作,详细内容请读者自己去尝试。
(3)关闭文件
对文件进行读写操作结束后,就要关闭文件,只需要一行代码即可完成:
f.close()
下面是以txt文件为例,进行完整的读写操作。
但是我还是觉得这样过于麻烦,每次读写文件结束后都需要打这么一行繁琐的代码,很令人不爽。这里我们介绍另外一种方式,实现的是相同的功能,不需要手动去关闭文件。
这里我们再简要介绍一下with关键字。with关键字用于python的上下文管理器机制。为了防止像open这一类文件打开方法在操作过程中出现异常或者错误,或者是操作结束后忘记关闭文件而导致文件非正常关闭出现文件泄露、破坏等后果,python提供了with这个上下文管理器机制,保证文件会正常关闭,不需要手动输入close语句。这里注意with语句后面加冒号,操作命令语句注意缩进。
下面我们介绍几种常用文件的读写操作。
二、txt文件的读写操作
txt文件是我们最常使用的文件类型,前面已经对其进行了简要介绍,下面再做几点补充。
1、操作命令
(1)f.read(n)
这里n可以自己设置读取内容的多少,不设置或者设置为负值,则读取全部内容。请看示例:
(2)f.readline()
从文件中读取一行内容,换行符是‘\n’,重复输入此命令是从下一行开始读取。请看示例:
仔细观察我们可以发现,打印一次file.readline(),它只输出一行,并且指针移到了下一行开头。最后一行输出的是空字符,说明指针到了文件结尾,并且不会自动回到开头。
每输出一行内容,它会自动输出一个\n,也就是自动空一行。我们可以再后面加上end=’’,意思就是它默认的结尾是‘\n’,我们把它改成空字符。
(3)f.readlines()
将文件中每一行作为一个元素,保存在一个列表中,返回的值就是这个列表。它会将文件中的全部内容一次性读入列表,有一个好处就是取用内容十分方便。请看示例:
(4)f.write(content)
用于将字符串或者byte类型的数据写入文件。该命令可以多次重复,但只是在计算机内存中操作,只有关闭了文件(with语句中不需要)才会保存到硬盘中。请看示例:
2、文件指针位置
在文件读写的操作过程中,我们发现文件的指针是会根据我们的打开方式、以及读写命令的执行,有一个固定的位置,这样使用起来不能够随心所欲,那么我们就需要能够自己掌握指针的位置。下面介绍几个常用的方法:
(1)f.tell()
返回文件读写指针当前所在的位置,这个位置是从文件开头算起的字节数,而不是字符数。请看示例:
从这里我们也可以发现,一个汉字占用三个字节。
(2)f.seek(offset,whence)
用于指定指针的位置。它有两个参数,先介绍第二个参数whence,它有三个固定的选项,分别是0、1、2。
0 | 从文件开始偏移 |
---|---|
1 | 从当前所在位置开始偏移 |
2 | 从文件末尾开始偏移 |
第一个参数是偏移量,就是需要从所选位置移动偏移的字节数,很容易理解。请看示例:(在‘你好’中间插入字符‘们’)