python之文件操作

特别说明:本篇博客都是基于python3.5环境进行操作说明。
  python文件操作主要包括打开文件、读文件、写文件、修改文件、关闭文件等操作,还会写一些基本操作方法。文件的操作基本分三步:(1)打开文件获得文件这个对象 (2)操作文件 (3)关闭文件。

一、打开文件

(1)打开文件基本模式

  打开文件需要指定文件的路径、打开方式和打开文件的编码。打开文件即可获得这个文件的对象,也叫句柄,本篇博客的文件对象命名设定为f。打开文件有三种基本模式:r/a/w,如果打开文件的时候,未指定模式,则默认’r’读模式。

  1. ‘w’:只写模式,它是只能写,而不能读的。如果用’w’模式打开一个不存在的文件,则会创建新的文件开始写入;如果用’w’模式打开一个已存在的文件,则会清空文件里内容数据,重新写入新的内容。
  2. ‘r’:只读模式,它是只能读,而不能写的。如果用’r’模式,文件必须得存在,若文件不存在,会报FileNotFoundError错误。
  3. ‘a’:追加模式,它是只能写,不能读的。如果用’a’模式写,文件不存在的话,会新建文件再写入数据;如果用’a’模式写,文件存在的话,会在文件内容的末尾写入内容,不会清空原来的内容

(2)加上’+’模式

  1. ‘w+’:可读可写模式。文件不存在,则新建;存在的话,则清空文件重新写入。’w+’重要一点是会把原来的内容清空(请慎重使用)
  2. ‘r+’:可读可写模式。重要是文件必须存在,不存在的话,打开会报错,同时写的话,则文件开头写入内容。
  3. ‘a+’:可读可写模式。文件不存在则新建;存在的话,则文件末尾追加内容。

二、文件的基本操作

fw = open('python.txt','w+',encoding='utf-8')#以w+模式打开文件,encoding指定文件的编码为utf-8
fw.write('天气真好!')#写文件
fw.seek(0)#把文件的指针指向文件开头
res = fw.read()#读文件
print(res)
fw.close()#关闭文件

三、文件操作方法

f=open('python.txt','w+',encoding='utf-8')#打开文件
#python2 打开文件除了open()方法,还有一种file()方法:f = file('a.txt','r'),python3没有这个file()方法。

f.writable()#判断文件是否可写

f.readable()#判断文件是否可读

f.write('天气真好!'+'\n')#写文件,写字符串到文件里

f.writelines(['搏击'+'\n','打篮球'+'\n'])#写文件,写列表到文件里

f.read()#读文件的所有内容,返回的是字符串

f.readlines()#读文件所有的内容,返回的是列表

f.readline()#读一行内容,返回的是字符串 

f.tell()#返回文件的当前指针位置 

f.truncate()#清空文件内容 

f.seek(0)#移动文件指针的执行,传0是代表把文件指针指向文件开头 

f.flush()#让write()后,f.flush()把内存里的数据立马写入到磁盘里,使得写完就生效;
#而实际的write()写有缓存时间,无法立即写入 

f.close()#关闭文件 

四、读文件

  上面的文件操作方法说道read()和readlines()的读文件,会把所有的数据一下全部读到内存里,若读大文件,内存不够的话,则内存会被挤爆,所以这两种方法,即不安全效率又不高。其实我们可以读一行,释放一行,具体的代码实现如下所示:

fw = open('python.txt','r',encoding='utf-8')
for line in fw:#line是文件每行的内容
    print(line)
fw.close()

五、修改文件

  修改文件有两种方法,一种是读取文件所有的内容,把原文件清空,重新写入新的内容;二种是修改后的内容写入到一个新的文件里,然后让新文件替代旧文件。第一种方法不适用于大文件。

#第一种方法,适用于文件小的情况。在不删除原文件的情况下,修改文件的内容。
fw = open('python.txt','r+',encoding='utf-8')
res = fw.read()
new_res = res.replace('周五周六','周末')
fw.seek(0)
fw.truncate()
fw.write(new_res)
fw.close()
#第二种方法,无论文件大小都适合。新建文件,一行行的写入替换内容,再删除旧文件,最后新文件更名成原文件名。给人一种在原文件修改内容的假象。
import os
fw = open('python.txt','r+',encoding='utf-8')
ff = open('ddd.txt','a+',encoding='utf-8')
for line in fw:
    new_line =line.replace('下课','uuua联系')
    ff.write(new_line)
fw.close()
ff.close()
os.remove('python.txt')
os.rename('ddd.txt','python.txt')

六、with用法

  带上with方法,在文件不用的时候,则会自动关闭该文件,而不需要再写close()。一个简单的例子如下:

with open('python.txt','w+',encoding='utf-8') as fw: #以w+模式打开文件,encoding指定文件的编码为utf-8
    fw.write('天气真好77777!')#写文件
    fw.seek(0)#把文件的指针指向文件开头
    res = fw.read()#读文件
    print(res)

如果要同时打开两个文件,写法如下所示:

with open("file.txt","r",encoding='utf-8') as fr,\
        open("file_new.txt","a+",encoding='utf-8') as fa:#代码太长,为了方便阅读,可以加上"\",让代码换行。

七、总结

  文件的操作暂时只知道这么多,若有不正确的点请指出,谢谢。
  关于文件有一个重要的通用思路:比如在文件里找匹配的内容(ex:文件里是否存在某个用户),或添加结构化的内容(ex:字典)到文件里等等,这些情况的思路就是先读文件的内容,把文件的内容存到列表或字典等数据类型中,然后再对这些数据类型数据进行查找、修改、添加和删除等操作;若是修改或添加或删除等操作,还有最后一点就是清空原文件,再把这些新数据重新写入到文件里。(重要*)

你可能感兴趣的:(python)