python中的文件操作基础
在 Python 中要操作文件需要记住几个函数和方法:
open函数,打开文件,并且返回文件操作对象
read和readline 、readlines方法,将文件内容读取到内存
write方法,将指定内容写入文件
close方法,关闭文件
open函数
在Python语言中,负责文件操作的称为文件对象,文件对象不仅可以访问存储在磁盘中的文件,也可以访问网络文件。
通过文件句柄进行文件操作,会用到open函数。
Python中用于访问文件的open函数,应用Python提供的open函数可以返回文件对象。open函数提供了输入/输出操作的通用接口,open函数成功打开文件后会返回一个文件对象,打开失败时会抛出异常IOError。open函数的基本语法如下:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
open函数有八个参数,分别是fileName、mode、buffering、encoding、errors、newline、closefd、opener,比较重要的是前四个参数,除了fileName参数外,其它都有默认值,因此使用open函数时,不需要传入全部参数。
下面重点对前四个参数予以详细说明:
☆fileName指定了要打开的文件名称,fileName的数据类型为字符串,fileName也包含了文件所在的存储路径,存储路径可以是相对路径,此时文件在工程目录下面f=open('test.txt','r'),也可以是绝对路径,此时可任意指定目录,比如f=open('d:/ pythonDemo/test.txt','r')
☆mode指定了文件的打开模式,也就是设定文件的打开权限。文件的打开模式有:
☆buffering用于指定打开文件所用的缓冲方式,缓冲是指用于读取文件的缓冲区,缓冲区就是一段内存区域。设置缓冲区的目的是先把文件内容读取到缓冲区,可以减少CPU读取磁盘的次数。Buffering为0时表示不缓冲,为1时表示只缓冲一行数据,为-1时表示使用系统默认缓冲机制,默认为-1。任何大于1的值表示使用给定的的值作为缓冲区大小。一般情况下使用函数默认值即可。
☆encoding用于指定文件的编码方式,默认采用utf-8,编码方式主要是指文件中的字符编码。我们经常会碰到这样的情况,当打开一个文件时,内容全部是乱码,这是因为创建文件时采用的编码方式,和打开文件时的编码方式不一样,就会造成字符显示错误,看上去就是乱码。
文件操作的流程
1. 打开文件,得到文件对象(有资料说是句柄)一个变量
2. 通过句柄对文件进行操作
3. 关闭文件
例1、用记事本先建立一个test.txt文件,通过文件句柄读取这个文件。
test.txt文件的内容如下:
这是python测试文件
good!
新建一个pyTest01.py代码文件内容如下:
filename = 'test.txt'
f = open(filename,'r',encoding='utf-8') #打开文件
context = f.read() #文件进行操作
print(context)
f.close() #关闭文件
运行结果:
不要小看关闭文件这一步,因为我们读取文件是把文科读取到内存中的,如果我们没关闭它,它就会一直占用系统资源,而且还可能导致其他不安全隐患。还有一种方法可以让我们不用去特意关注关闭文件。那就是 with open()。示例如下。
例2、使用with open()的代码文件pyTest02.py内容如下:
filename = 'test.txt'
with open(filename,'r',encoding='utf-8') as f: #打开文件
context = f.read() #文件进行操作
print(context)
运行结果和上例一样。
write方法
写数据:使用write(“content”),可以完成向文件写入数据,注意:如果文件不存在那么创建,如果存在那么就先清空文件(覆盖),然后写入数据到文件里.。
例3、给test.txt文件追加两行文本
filename = 'test.txt'
f = open(filename,'a',encoding='utf-8') #打开文件,追加
f.write('hello,你好\n') #换行符\n
f.write('呵呵,哈哈\n')
f.close() #关闭文件
read和readline 、readlines方法
读数据:使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(字符个数),如果没有传入num或者为负,那么就表示读取文件中所有的数据,read()将读取的数据以字符串的形式返回。注意:
如果使用read读了多次,那么后面继续使用read读取的数据是从上次读完后的位置开始的
注意:read ()方法默认会把文件的所有内容 一次性读取到内存,当然可以指定读取的字符数。如果文件太大,对内存的占用会非常严重。
readlines()可以按照行的方式把整个文件中的内容进行一次性读取,读取所有行(直到结束符 EOF)并返回列表,并且返回的是一个列表,其中每一行(按着换行符进行判断一行)的数据为一个元素。
readline(),对原文件的数据按行读取,(行的划分是\n).每次只读取一行。如果有多次读取的话,下面一次读取的偏移量是上面读取后的偏移量。
例4、读取test.txt文件中的文本4个字符
filename = 'test.txt'
f = open(filename,'r',encoding='utf-8') #打开文件
content=f.read(4) #读取4个字符
print("读取的内容:%s"%content)
f.close()