一、文件的打开与关闭
1、文件的打开
在Python中,open方法用来打开文件,语法格式如下:
open(文件名[, 访问模式,encoding=编码格式])
上述格式中,“文件名”必须要填写,“访问模式”和“encoding”是可选的。
注意:使用open方法打开文件时,如果没有注明访问模式(默认是只读的访问模式),则必须保证文件是存在的,否则就会报错。如下所示:
2、文件模式
如果使用open方法打开文件时,只带一个文件名,那么我们只能读取文件。如果打开的文件允许写数据,则必须指明文件的模式。Python中文件的访问模式有多种,如下所示:
3、文件的关闭
凡是打开的文件,切记要使用close方法关闭。即使文件会在程序退出后自动关闭,但是考虑到数据的安全性,在每次使用完文件后,都要使用close方法关闭文件,否则一旦程序崩溃,
很可能导致文件中的数据没有保存。close方法使非常简单,如下所示:
- f = open('test.txt')
- f.close()
4、安全的打开关闭文件的方式(自动调用close方法)
- with open("d://test.txt","w") as f:
- f.write("hello python")
或者
- with open("d://test.txt","w",endconding="utf-8") as f:
- f.write("hello 你好")
二、文件的读写
1、写文件
1.1 向文件写数据,需要用到write方法来完成,在操作某个文件时,每调用一次write方法,写入的数据就会追加到文件末尾。示例如下所示:
- f = open('itheima.txt','w')
- f.write('hello itheima, i am here!')
- f.write('\n')
- f.write('hello itheima, i am here!')
- f.write('\n')
- f.write('hello itheima, i am here!')
- f.write('\n')
注意:当向文件写入数据的时候,如果文件不存在,那么系统会自动创建一个文件并写入数据。如果文件存在,那么会清空原来文件的数据,重新写入新的数据。
1.2 writelines向文件写入一个字符串序列
- f = open("test.txt","w",encoding="utf-8")
- f.writelines(["张三\n","李四\n","王五\n"])
- f.close()
2、读文件
从文件中读取数据时,可以通过多种方式来获取,具体如下。
2.1 使用read方法读取文件
read方法可以从文件中读取数据,该方法的定义语法如下:
read(size)
上述方法中,size表示要从文件中读取的数据的长度,单位为字节。如果没有指定size,那么就表示读取文件的全部数据。
使用read方法读取文件示例如下所示:
- f = open('itheima.txt','r')
- content = f.read(12)
- print(content)
- print('-'*30)
- content = f.read()
- print(content)
- f.close()
注意:多次读取文件时,每次读取文件都会接着上次读取的位置读后面的数据。
2.2 使用readlines方法读取文件
如文件的内容很少,则可以使用readlines方法把整个文件中的内容进行一次性读取。readlines方法会返回一个列表,列表中的每一个元素为文件中的每一行数据。假设文件“itheima.txt”里面有3行数据“hello itheima, i am here!”,那么,使用readlines方法读取文件的方式如下所示:
- f = open('itheima.txt','r')
- content = f.readlines()
- print(type(content))
- i = 1
- for temp in content:
- print("%d:%s" %(i,temp))
- i += 1
- f.close()
2.3 使用readline方法一行一行读取数据
同样,以读取itheima.txt文件为例,该文件包含了三行数据,那么使用readline方法读取文件内容的方式如下所示:
- f = open('itheima.txt','r')
- content = f.readline()
- print('1:%s'%content)
- content = f.readline()
- print('2:%s'%content)
- f.close()
思考题:
如果一个文件很大,如5GB,试想应该怎么样把文件的数据读取到内存然后进行处理。
三、文件读写应用--制作文件的备份
实际开发中,文件的读写可以完成很多功能,如文件的备份就是文件读写的过程。假设,现在有一个文件“data.txt”,该文件存储的数据如下所示:
If you were a teardrop;In my eye,
For fear of losing you,I would never cry.
And if the golden sun,Should cease to shine its light,
Just one smile from you,Would make my whole world bright.
此时,如果想制作data.txt的备份文件,则需要读取原文件的数据,并将获取的数据写入备份文件。接下来,通过代码演示,如下所示:
oldFileName = input("Please enter the name of the file to be copied:") oldFile = open(oldFileName,'r') if oldFile: fileFlagNum = oldFileName.rfind('.') if fileFlagNum > 0: fileFlag = oldFileName[fileFlagNum:] newFileName = oldFileName[:fileFlagNum] + '[copy]' + fileFlag newFile = open(newFileName, 'w') for lineContent in oldFile.readlines(): newFile.write(lineContent) oldFile.close() newFile.close()
四、文件的定位读写
通过前面的了解,文件的读写都是顺序进行的。但是在实际开发中,可能会需要从文件的某个特定位置开始读写,这时,我们需要对文件的读写位置进行定位,包括获取文件
当前的读写位置,以及定位到文件的指定读写位置。接下来详细介绍这两种定位方式。
1、使用tell方法来获取文件当前的读写位置
在读写文件的过程中,如果想知道当前位置,可以使用tell方法获取。tell方法返回文件的当前位置,即文件指针当前位置。
使用tell方法获取文件当前读写位置示例如下:
f = open('test.txt','r') str = f.read(4) print('read data is :',str) position = f.tell() print('The current position :',position) str = f.read(8) print('read data is :',str) position = f.tell() print('The current position :',position) str = f.read(3) print('read data is :',str) position = f.tell() print('The current position :',position) f.close()
2、使用seek方法定位到文件的指定位置
如果在读取文件的过程中,需要从指定的位置开始读写操作,就可以使用seek方法实现。seek方法的定义语法如下:
seek(offset[, whence])
seek方法的参数介绍如下所示:
(1)offset:表示偏移量,也就是需要移动的字节数
(2)whence: 表示方向,该参数的值有三个:
SEEK_SET或者0,whence参数的默认值,表示从文件的起始位置开始偏移
SEEK_CUR或者1,表示从文件当前的位置开始偏移
SEEK_END或者2,表示从文件末尾开始偏移
使用seek方法获取文件当前读写位置示例如下:
- f = open('test.txt','r')
- str = f.read(15)
- print('read data is :',str)
- position = f.tell()
- print('The current position :',position)
- f.seek(4)
- position = f.tell()
- print('The current position :',position)
- f.close()
五、文件的重命名和删除
有些时候,需要对文件进行重命名、删除等一些操作,Python的OS模块已经默认包含了这些功能,接下来,详细介绍这些操作。
1、文件的重命名
OS模块的rename方法可以实现完成对文件的重命名操作,格式如下:
OS.rename(src,dst)
其中src指的是需要修改的文件名,dst指的是修改之后的新的文件名。
示例:
- import OS
- OS.rename('毕业论文.txt','毕业论文-最终版.txt')
2、文件的删除
OS模块的remove方法可以实现完成对文件的删除操作,格式如下:
OS.remove(path)
path指的是指定路径下的文件。
示例:
- import OS
- OS.remove('毕业论文.txt')
六、文件夹的相关操作
1、创建文件夹
OS模块的mkdir方法用来创建文件夹,示例代码如下所示:
- import OS
- OS.mkdir('wzb')
2、获取当前目录
OS模块的getcwd方法用来获取当前的目录,示例代码如下所示:
- import OS
- OS.getcwd()
3、改变默认目录
OS模块的chdir方法用来改变默认目录,例如,将当前目录改为上一级目录,代码如下所示:
- import OS
- OS.chdir('../')
4、获取目录列表
OS模块的listdir方法用来获取目录列表,例如,要获取当前路径下的子目录,代码如下所示:
- import OS
- OS.listdir('./')
5、删除空文件夹
OS模块的rmdir方法用来删除文件夹,例如,下面的代码删除了当前路径下的“wzb”目录:
- import OS
- OS.rmdir('wzb')
6、删除非空文件夹
- import shutil
- shutil.rmtree("d://testdir123")
联系客服