操作文件
1.打开文件:在Python中通常使用open()函数来打开一个文件。
使用形式如下:
open(file,mode='r',buffering=-1,ecoding=None,errors=None,newline=None,closefd=True,opener=None)
#函数的参数较多,如果不理解参数功能说明可以先看代码部分,再回头对比参数说明会好理解
#不能在使用代码操作文件时,还通过操作系统文件,否则会冲突
功能:打开一个文件。这里的打开文件与在操作系统中打开文件的概念不同,这里的打开文件是与文件建立通道并获取操作文件的权限。
参数file:需要打开的文件路径(包含路径和完整的文件名称),其数据类型为字符串类型。
参数mode:指明文件打开的模式,文件常见的几种打开模式如下
| 'r' | 只读模式。如果计算机中此文件不存在则会出现异常错误;如果此文件存在则只允许对文件进行读取操作 |
| 'w' | 覆盖写模式。只允许对文件进行写入操作,如果计算机中此文件已存在,则先清除此文件中的内容再写入;如果此文件不存在则建一个新文件再写入 |
|
'x' |
创建写模式。如果计算机中不存在此文件创建一个新文件,如果存在此文件则返回异常错误FileExistsError(文件存在错误) |
| 'a' | 追加写模式。只允许对文件进行写入操作,如果计算机中存在此文件,则在该文件的末尾继续写入(不删除文件原来的内容);如果不存在此文件,则创建一个新文件再写入 |
| 'b' | 二进制模式。当文件是二制文件时,需要使用'b'模式 |
| 't' | 文本模式。与b'模式相互对应,(模式为默认模式 |
| '+' | 增加模式。与Y、w’、x、a’模式一同使用,可在原功能基础上增加读写功能,例如'r+’表示文件可读可写 |
| 'U' | 通用换行模式(已弃用) |
open()函数的mode参数具有打开模式,接下来将介绍其中几个常见模式的使用效果,分别为上述几个标红的打开模式
1).'w'覆盖写模式:'w'为覆盖写模式,如果文件夹中没有参数file路径中指定的文件,则会创建名为file的文件,如果文件夹中此文件已存在,则删除次文件中的内容,重新写入新的内容。
for i in range(1,101): #循环100次
path = 'D:\\\\代码\\\\数据'+str(i)+'.txt' #代码创建需要操作的文本路径
f = open(path,'w') #使用'w'模式创建文件
f.close() #执行后创建100个文件
2).'x'创建写模式:'x'模式为创建写模式,在使用模式时,会创建一个新文件,并给定新文件写入权限。如果计算机中已存在与参数file同名的文件,则会出现异常错误,因此需要确保创建的文件在计算机中并不存在。
示例代码:
for i in range (1,101) :
path='E:\\\\书代码\\\\数据2\\\\数据'+str(i)+'.txt'
f = open (path,'x')
f.close()
代码执行结果:
Traceback (most recent call last):
File 'E:\\书代码\\第七章\\第七章第七个程序.py',line3,in<module>
f = open (path,'x')
FileExistsError: [Errno 17] File exists: 'E:\\\\书代码\\\\数据2\\\\数据1.txt'
由于上一个示例代码已经创建了相同名称的文件,因此执行代码后会出现报错,x模式与'w’模式的区别在于'模式需要确保文件不存在,否则会引发报错。
修改后的新代码如下:
for i in range (1,101):
path='E:\\\\书代码\\\\数据2\\\\新数据'+str(i)+'.txt'
f = open (path,'x')
f.close()
3).'a'追加写模式:‘’a‘’模式为追加写模式,使用此模式时,会保留原有的文件内容,并在文件的未尾继续追加写入新内容。如果文件不存在,则会创建一个新文件,新文件具备写入权限。
示例代码(在a.txt文件中追加内容“提高办公效率”):
f= open(r'E:\\书代码\\第7章\\a.txt', 'a', encoding ='utf-8')
f.write('提高办公效率')
f.close()
4).'+'增加模式:'+'模式为增加模式,此模式需要与'r'、w、'x、'a'模式中的一种结合使用,表示在原有模式基础上增加读写权限。
示例代码:
f=open(r'E:\\书代码\\第7章\\a.txt','r+',encoding='utf-8') #第1行代码使用'r+'模式打开“E:书代码\\第7章\\a.txt”文件,可以对文件实现读取和写入操作。
print (f.read()) #第2行代码使用read(方法读取文件中的所有内容
f.write('。每日学习一个新技能') #第3行代码使用write()方法向文件中写入内容“。每日学习一个新技能”。
f.close ()
模式决定了文件的操作权限,如果越权执行其他代码操作将会出现报错。
示例代码:
f=open(r'E:\\书代码\\第7章\\a.txt','r',encoding='utf-8')
print (f.read())
f.write('。每日学习一个新技能')
f.close ()
#该代码与上一个示例代码的区别仅在于open()函数中的模式为'r,这限制了之后的代码只能对文件进行读取操作。
#因此第3行代码在执行write()方法写入内容时便会引发异常错误。执行代码后将会显现io.Unsupported0peration错误
5).open()函数的复合写法:open()函数还有一种复合写法,可以避免用户因忘记使用close()方法关闭文件而导致的程序异常等问题。
其使用形式如下:
with open(参数) as 变量名:
with:是Python中的保留字,是一种上下文管理器,可以自动管理文件,无须再使用close()方法来进行件的关闭操作。
as:是Python中的保留字,与with结合使用。
open()函数的使用形式与之前介绍的一致。变量名即文件打开后的赋值变量名,与以上示例代码中变量f含义相同。需要注意的是,在复合写法的最后有一个“:”,且对文件进行操作的代码都需要缩进(缩进要求与if语句、for循环的代码块缩进要求类似)。
示例代码(读取文件“E:\\书代码\\第7章\\编程语言概述.txt”的内容):
with open(r'E:\\书代码\\第7章\\编程语言概述.txt','r',encoding = 'utf-8') as f:
print (f.read ())
#第1行代码使用复合写法读取文件“E:书代码\\第7章\\编程语言概述.txt”,第2行代码缩进一个制表符,并输出文件中的全部内容。
2.读取文件
读取文件内容前需要确定文件的打开模式是否为只读模式('r'模式),如果是,则可以使用文件对象中的read()、readline()、readlines()方法读取文件内的信息。
1).read()方法
read()方法的使用形式如下:
文件对象.read(size=-1)
功能:从文件中读取内容。
参数size:从文件中读取size个字符的内容,默认读取全部内容。
返回值:读取内容,是字符串类型的。
示例代码(读取文件中的全部内容):
f=open(r'E:\\书代码\\第7章\\编程语言概述.txt', 'r', encoding = 'utf-8') #第1行代码以'r模式打开文件,且设置读取文件的编码方式为UTF-8(大小写均可,有中文时需要设量UTF-8),返回文件对象f。
print (f.read()) #第2行代码对文件对象f使用read()方法,read()方法中无参数,因此会读取文件中的全部内容。
f.close ()
示例代码(读取文件中的前10个字符):
f=open(r'E:\\书代码\\第7章\\编程语言概述.txt','r',encoding='utf-8")
a=f.read(10)
print (a,type(a))
f.close()
代码执行结果:
由于计算机不能识别人<class'str'>
2).readline()方法
readline()方法的使用形式如下:
readline (size = -1)
功能:从文件中读取一行内容。
参数size:默认从文件中读取一行内容,如果size为其他数值,则读取该行前size个字符。
返回值:读取内容,是字符串类型的。
示例代码:
f=open(r'E:\\书代码\\第7章\\编程语言概述.txt','r',encoding='utf-8')
print (f.readline())
f.close ()
执行代码后只会输出“编程语言概述.txt”文件中的一行内容
如果往readline()中填入参数6,则表示读取当前行内容中的前6个字符
代码如下:
f= open('E:书代码\\第7章\\编程语言概述.txt','r',encoding='utf-8')
print (f.readline (6))
f.close ()
代码执行结果:
由于计算机不
3).readlines()方法
readlines()方法的使用形式如下:
readlines (hint=-1)
功能:从文件中读取所有行的内容,以列表形式返回,单行内容为列表中的一个元素。
参数hint:获取所在行内容的hint个字符。例如第1行有5个字符,hint=5,就只读取第1行内容(hint<=5时都只会读取第1行的内容)。第2行如果有5个字符,hint=6,会读取第1行和第2行内容(5<=hint<=11时会读取前两行的内容)。
返回值:包含文件内容的列表。
示例代码(获取文件的全部内容):
f=open('E:\\书代码\\第7章\\编程语言概述.txt','r',encoding='utf-8')
print (f.readlines ())
f.close()
4).for循环遍历:读取文件内容还可以通过for循环遍历的方式来实现
示例代码:
f=open('E:\\书代码\\第7章\\编程语言概述.txt','r',encoding='utf-8') #第1行代码以!模式打开E:书代码\\第7章\\编程语言概述.txt”文件,且将编码方式设置为UTF-8。
for line in f: #第2行代码是一个for循环语句,循环内容为文件对象f,此方法可以将对象中的内容一行行地赋值给变量line。
print (line)
f.close()
3.写入文件
1).write()方法
write()方法的使用形式如下:
write(text)
功能:把字符串text写入文件。
参数text:表示需要写入的信息,其数据类型为字符串类型。
返回值:返回写入的字符数(字符串的长度)。
示例代码(往文件中写入内容):
f=open(r'E:\\书代码\\第7章\\编程语言概述.txt','w',encoding='utf-8')
print (f.write('我正在学习Python'))
f.close()
第1行代码表示打开“E:书代码\\编程语言概述.txt”文件,由于使用了'w’模式,因此会将原有“编程语言概述.txt”文件的内容全部清除。
第2行代码将字符串'我正在学习Python'通过write()方法写入“编程语言概述.txt”文件。
第3行代码使用close()方法关闭文件,第2行代码写入的内容只有在关闭文件时才能保存下来。如果读者忘记在代码最后使用close()可能会导致写入的内容无法被保存到文件中。
2).writelines()方法
writelines()方法的使用形式如下:
writelines(lines)
功能:把字符串列表(列表中的元素均为字符串)写入文件,且不添加换行符。
参数lines:字符串列表。
返回值:返回None,表示空。
示例代码(将字符串列表的内容写入文件):
f= open('E:\\书代码\\第7章\\a7.txt','w',encoding='utf-8')
ls = ['zhangsan','lisi','wangwu']
print (f.writelines (ls))
f.close()
执行代码后会出现异常错误,这是因为字符串中的路径地址是非法的,系统会将'E:\\书代码\\第7章\\a7.txt'中的\\a默认为转义字符,因此在书写地址时要用\\\\替代\\。
修改后的新代码如下:
f=open('E:\\\\书代码\\\\第7章\\\\a7.txt','w',encoding='utf-8')
1s = ['zhangsan','lisi','wangwu']
print (f.writelines(1s))
f.close()
在第1行代码中,由子文件央“E:\\\\书代码\\\\第7章”中并没有a7.txt文件,因此程序会在文件央“E:\\\\书代码\\\\第7章”中创建一个名为“a7.taxt”的新文件。第3行代码将列表ls写入文件对象f中,由于writelines()方法井不返回内容,因此输出结果为None。




