Python 文件操作
1.打开文件只读
f=open('test1','r',encodeing='utf8') #打开一个文件test1,只读方式,编码方式为utf-8,创建文件对象 data=f.read(param) #读取文件对象的内容并赋值 read()参数param为数字,代表读取的字符,注意:在python3中中文和英文都是代表一个字符 print(data) #打印内容 f.close() #关闭文件对象
注意:只读模式下,不可写
2.打开文件只写
f=open('test1','w',encodeing='utf8') #打开一个文件test1,只写方式,编码方式为utf-8,创建文件对象 f.write(param) #读取文件对象并赋值 write()参数param为写入的内容 f.close() #关闭文件对象 f.fileno()打印当前文件的信息,每个文件不同,为文件相关信息
注意:如果存在文件,则将文件内容清空;如果不存在则创建文件
注意:写模式下首先清空原先文件中的所有内容,然后将参数内容写入
当使用两个write函数时,后一个函数写入内容不会将前一个覆盖,而是追加
注意:只写模式下,不可读
3.打开文件追加
f=open('test1','a',encodeing='utf8') #打开一个文件test1,追加方式,编码方式为utf-8,创建文件对象 f.write(param) #读取文件对象并赋值 write()参数param为写入的内容, f.close() #关闭文件对象
注意:追加模式下,不可读
注意:如果存在文件,则将参数内容追加到文件中;如果不存在则创建文件
4.读取文件函数
f.readline() #读取第一行的数据,第二次调用时文件句柄变为第二行行首 f.readlines() #读取所有行的数据,每行作为一个字符串元素组成一个列表返回,每行的数据内容中包含回车换行符
在读取文件时,取出文件数据后赋值,关闭文件句柄,释放内存资源.
for i in f: #在for循环内部将f对象做成一个迭代器,用一行取一行 print(i.strip())
5.读取的最好的方式
number=0 for i in f: number+=1 if number==8: i=''.join([i.strip(),'Added']) print(i.strip())
6.句柄位置获取函数
f.tell() 默认为0
英文一个字符为1,中文一个字符为1 PYTHON2
英文一个字符为1,中文一个字符为3 PYTHON3
7.移动文件句柄
seek() 方法用于移动文件读取指针到指定位置。
8.手动将数据从内存写到磁盘
flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
9.截断文件
truncate() 方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。
如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。
打开文件方式为:w,则格式化文件,截取空格
打开文件方式为:a,则取参数位数据,其他被截断
10.文件打开其他模式
10.1 r+
f=open('test1.txt','r+',encoding='utf8') # 以读写模式打开 print(f.readline()) #读取数据为第一行数据 f,write('岳飞') #在最后追加数据
读取内容不限,如果写入内容在最后追加(读句柄和写句柄不一致)
10.2 w+
f=open('test1.txt','w+',encoding='utf8') # 以写读模式打开,首先格式化文件内容 print(f.readline()) #读取数据为空 f,write('岳飞') #在第一行开始写数据 print(f.tell()) #打印当前句柄位置 为6 print(f.readline()) #当前句柄位置为6,后面没有数据,故读取数据 仍然为空 如果想读取到写入的内容 前面添加指定句柄为0即 f.seek(0) f.close() #关闭文件读取占用的资源
10.3 a+
f=open('test1.txt','a+',encoding='utf8') # 以追加+模式打开 print(f.readline()) #读取数据为最后句柄的后空白数据,为空 f,write('岳飞') #在最后追加数据
读取内容在最后,如果写入内容在最后追加
11.终极问题:如何对现有文件进行修改----无法修改原文件
替代方案:创建新文件,将原文件内容读取并修改到内存后,写入新文件中
f_read=open('test.txt','r','encoding=utf8') f_write=open('test_new.txt','w','encoding=utf8') number=0 for line in f_read: number+=1 if number==8: line=''.join([line.strip(),'string\n']) #新字符串 f_write.write(line) f_read.close() f_write.close()
12.with方法管理文件对象(创建以及删除)
f=open('test.txt','r','encoding=utf8')
f.readline()
f.close()
等同于
with open('test','r','encoding=utf8') as f:
f.readline()
with语句帮助我们关闭文件,避免遗漏
则 11可改造为:
with open('test.txt','r','encoding=utf8') as f_read ,open('test_new.txt','w','encoding=utf8') as f_write: number=0 for line in f_read: number+=1 if number==8: line=''.join([line.strip(),'string\n']) #新字符串 f_write.write(line)
Python2.7之后可以在with中创建两个对象
浙公网安备 33010602011771号