在Python中,文件也是一种类型的对象,类似以前学过的其他数据类型,包括文本的、图片的、音频的、视频的等等,还有不少没见过的扩展名的。
操作文件的流程:
#1. 打开文件,得到文件句柄并赋值给一个变量 f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r #2. 通过句柄对文件进行操作 data=f.read() #3. 关闭文件,谨记一定不要忘记这个 f.close()
1、Open()打开文件
首先,在所在文件下创建一个文件,文件名:learn.txt,在文件里输入以下内容:
learn python
http://www.cnblogs.com/DreamRJF/
This is good day!
此文件里有三行。
f=open("learn.txt") #打开已有文件 line=f.readlines() #读取每一行内容,存放于列表中 for i in line: print(i) f.close()
执行结果:
注:Python3中运行,下同
从打印的结果看出,每一行跟前面看到的文件内容中的每一行是一样的。只是行与行之间多了一空行,前面显示文章内容的时候,没有这个空行。或许这无关紧要,但是,还要深究一下,才能豁然。
在原文中,每行结束有本行结束符号 ,表示换行。在for语句汇总,print line表示每次打印完line的对象之后,就换行,也就是打印完line的对象之后会增加一个 。这样看来,在每行末尾就有两个 ,即: ,于是在打印中就出现了一个空行。加上一个strip(‘ ’),去掉换行符 ,相当于去掉一行。
f=open("learn.txt") #打开已有文件 line=f.readlines() #读取每一行内容,存放于列表中 for i in line: i=i.strip(' ') #strip(' ')去掉 print(i) f.close()
执行结果:
特别提醒,因为当前的交互模式是在该文件所在目录启动的,所以,就相当于这个实验室和文件learn.txt是同一个目录,这时候我们打开文件learn.txt,就认为是在本目录中打开,如果文件不是在本目录中,需要写清楚路径。
2、创建文件
nf=open("learn0.txt",'w') nf.write("This is a file. I like program.")
在文件夹下创建learn0.txt文件,并在learn0.txt中写入:
This is a file.
I like program.
3、打开文件的模式
|
|||||||||||||||||
文件句柄 = open('文件路径', '模式')
4、打开文件的方法
#掌握 f.read() #读取所有内容,光标移动到文件末尾 f.readline() #读取一行内容,光标移动到第二行首部 f.readlines() #读取每一行内容,存放于列表中 f.write('1111 222 ') #针对文本模式的写,需要自己写换行符 f.write('1111 222 '.encode('utf-8')) #针对b模式的写,需要自己写换行符 f.writelines(['333 ','444 ']) #文件模式 f.writelines([bytes('333 ',encoding='utf-8'),'444 '.encode('utf-8')]) #b模式 #了解 f.readable() #文件是否可读 f.writable() #文件是否可读 f.closed #文件是否关闭 f.encoding #如果文件打开模式为b,则没有该属性 f.flush() #立刻将文件内容从内存刷到硬盘 f.name
5、With的使用
在对文件进行写入操作之后,一定要牢记一个事情:file.close()
,这个操作千万不要忘记,忘记了怎么办,那就补上吧,也没有什么天塌地陷的后果。有另外一种方法,能够不用这么让人揪心,实现安全地关闭文件,就是with语句。
with open("learn.txt",'模式') as f: f.write("Today is good day!") with open("learn.txt",'r') as f:
data=f.read() print(data)
这里就不用close()了。
6、文件内光标移动
一: read(3):
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate
注意:
1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果