【打开文件】
我们
使用open()函数来打开文件
,并返回文件对象。open()的参数有很多,如下:
这些参数中的第一、二个参数是重点。
第一个参数 是传入文件名: 若只有文件名,不带路径的话,python会在当前路径下查找该文件并打开。
第二个参数
是文件的打开模式:其有以下几种参数:
===========================================================
1. r 以只读方式打开文件( 默认 )。
2. w 以写入的方式打开文件,会覆盖已存在的文件。
3. x 如果文件已经存在,使用此模式打开将引发异常。
4. a 以写入模式打开,如果文件已存在,则在末尾追加写入。
5. b 以二进制模式打开文件。
6. t 以文本模式打开文件( 默认 )
7. + 可读写模式( 添加到其他模式中使用 )
8. U 通用换行符支持。
===========================================================
下面我们 使用open()来打开一个文件 。
f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test.txt')
print( f )
运行结果:
【注意】:
打开文件时,第一个参数为文件路径,此时路径中的斜杠要写成双斜杠。因为单斜杠
会转义,从而导致输入的路径无效。另外直接用open()获取的是文件对象,如需读取,
还需要使用下面介绍的文件对象方法。
【文件对象方法】
即
对上面的文件对象进行读取和写入的方法
:
===========================================================
f.close() 关闭文件( 如果有文件写入操作,应该在写入后关闭
文件,如果不关闭,若中途断电,那么之前写入的数
据就不会被保存了 )
f.read( n ) 从文件读取 n 个字符,当未给定 n 或给定负值的时
候,读取剩余的所有字符,然后作为字符串返回
f.readline() 以写入模式打开,如果文件存在,则在末尾追加写入
list() 将文件对象转化为列表对象,进行迭代读取
f.write( str ) 将字符串str写入文件
f.writelines( seq ) 向文件写入字符串序列seq,seq应该是一个返回字符
串的可迭代对象
f.seek(offset,from) 在文件中移动文件指针,从from( 0代表文件起始位置,
1代表当前位置,2代表文件末尾 )便宜offset个字节
f.tell() 返回当前在文件中的位置
===========================================================
-------------------------------------------------------------------------------------------------------
read()方法
直接读取整个文件,将所有内容以字符串形式输出。read不能对单行数据进行分离操作。它占
用内存很大。
【思考】:下面的代码会读出什么
a = f.read()
b = f.read(-1)
c = f.read(10)
print( a )
print( b )
print( c )
'''
乍一看,会读出如下数据:
this is a test for the function of 'open()'
this is a test for the function of 'open()'
this is a
【实际上】输出的是:
this is a test for the function of 'open()'
'''
【解析】:
后两行空着的原因是:
第一行中的read()函数已经读完了所有的字符,指针已经移动到了字符串末尾,所以再次读取已经
没有东西可读了。想要再次读取,只能重新打开文件( 用open()函数 )。根据以上内容便可推知以下
代码的输出结果了:
f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test.txt')
b = f.read(5)
print( b ) #【输出】:this
c = f.read(10)
print( c ) #【输出】:is
readline()方法:
readline()每次读取(下)一行数据,可以对数据进行分离操作。它占用内存很小。
f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test1.txt')
d = f.readline()
e = f.readline()
g = f.readline()
h = f.readline()
print(d) #【输出】111111111111111111111111111
print(e) #【输出】222222222222222222222222222
print(g) #【输出】333333333333333333333333333
readlines()方法:
readlines()一次性读取所有行文件,可以利用遍历的方法对每一行数据进行处理。占用内存比较大。
f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test1.txt')
m = f.readlines()
print(m)
print()
#【输出】:['111111111111111111111111111\n', '222222222222222222222222222\n', '333333333333333333333333333']
上述三者性能比较:
以上三者中,read()速度最快,但功能最简单,有时不能满足需求。剩余两者功能类似,但是readlines()
明显比readline()速度快很多。
【文件内容的遍历】
谈到遍历文件内容,大家一般会想到如下的方法:
f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test1.txt')
lines = list(f)
for each_line in lines:
print(each_line)
#【输出】:
#1111111111111111111111
#2222222222222222222222
#3333333333333333333333
但是,上面的方法实际上效率非常低,当数据非常多的时候,效率会极其低下。所以我们
应该使用
如下的方法,亦能达到同样的效果。
f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test1.txt')
for line in f:
print(line)
这样的方法,简洁且效率高。
【文件的写入】
对文件进行写入要首先确保文件状态是可写入的('w'),前面的文件默认状态是只读('r'),所以这里我
们新创建一个可写入的文档进行操作。
f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test2.txt', 'w')
a = f.write( '自律使我自由!' )
print( a )
#【输出】:7 (说明我们写入了7个字符)
f = open('E:\\学习资料\\研究生\\小甲鱼python\\课程笔记\\5.文件\\test2.txt')
mess = f.read()
print( mess ) #【输出】:自律使我自由! 说明内容已经被成功写入了。