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中创建两个对象

 

posted on 2018-01-08 21:43  可爱的春哥  阅读(182)  评论(0)    收藏  举报

导航