全栈测试 一 | py3基础 三 :file对象测试数据的读写与操作

 文件的打开方式


打开方式

详细释义

r

 以只读方式打开文件。文件的指针会放在文件的开头。这是默认模式。

rb

 以二进制只读方式打开一个文件。文件指针会放在文件的开头。

r+

 以读写方式打开一个文件。文件指针将会放在文件的开头。(读取文件时,只能读,不能新建,如果文件没有,则会异常报错)

rb+

 以二进制读写方式打开一个文件。文件指针会放在文件的开头。

w

 以写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件

wb

 以二进制写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件

w+

 以读写方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件

wb+

 以二进制读写方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件

a

 以追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件尾,新的内容会写入到已有内容之后,如果该文件不存在,则创建新文件来写入

ab

 以二进制追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件尾,新的内容会写入到已有内容之后,如果该文件不存在,则创建新文件来写入

a+

 以读写方式打开一个文件,如果该文件已存在,文件指针将会放在文件尾,新的内容会写入到已有内容之后,如果该文件不存在,则创建新文件来写入

ab+

 以二进制追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件尾,新的内容会写入到已有内容之后,如果该文件不存在,则创建新文件来写入

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

文件的读操作


 

示例:

 1 print("->文件句柄的获取,读操作:")

 2

 3 f = open('无题','r',encoding='utf8') #此行作用就是获取文件句柄

 4 d = f.read()    #read方法读取文件所有内容

 5 f.close()

 6 print(d)

 7

 8 print('->例二:')

 9 f = open('无题','r',encoding='utf8')

10 e = f.read(9)   #read方法中索引表示读取字符数

11 f.close()

12 print(e)

13 #python3中,文件中一个中英文都占位1

运行结果:

->文件句柄的获取,读操作:

昨夜星辰昨夜风

画楼西畔桂堂东

身无彩凤双飞翼

心有灵犀一点通

->例二:

昨夜星辰昨夜风

画

 

 

文件的写操作


 

知识点:

    1. 写操作前,文件先格式化清空文件

    2.清空操作,在执行open的w方法后,清空

1 print("写的操作,写文件的时候,不能调用读方法,读文件的时候,不能调用写方法")

2

3 f = open('python','w',encoding='utf8')

4 f.write("I must learn python \nbecause, python is important \n")

5 f.write("java is better?")

6 f.write("maybe") #上面的语句,没有加换行符,所以输出的内容是紧接的

7 f.close()

运行结果:

打开文件后显示如下

I must learn python

because, python is important

java is better?maybe

 

文件的append方法


 

语法格式:

f = open('文件名','a','encoding = utf8')

文件这种方法为追加模式:1, 空白文件中,直接从头开始写入内容; 2 有内容的文件,会在末尾开始继续写入内容

示例:

f = open('python','a',encoding='utf8')

f.write("花开又花落")

f.close()

运行结果:

I must learn python

because, python is important

java is better?maybe花开又花落

 

readline readlines


 readline是逐行读取

readlines是全文读取


 

示例1 readline示例:

# -*-  coding:utf-8 -*-

'''

实际的工作中,使用的方法几乎为readline方法

'''

print("readline方法")

f = open('无题','r',encoding='utf-8')

a = f.readline()    #读取一行内容

print("此时光标位置:",f.tell())

b = f.readline()    #继续读取一行内容

print("此时光标位置:",f.tell())

print(a.strip())  #strip是字符串方法中去除空格和换行的方法

print(b.strip())

 

运行结果:

readline方法

此时光标位置: 23

此时光标位置: 46

昨夜星辰昨夜风

画楼西畔桂堂东

 

我读取的文件内容原件:

 

昨夜星辰昨夜风

画楼西畔桂堂东

身无彩凤双飞翼

心有灵犀一点通

南京

江苏

中国

 


 

示例2 文件内容的遍历示例:

#遍历文件,在第四行打印分割线,然后继续循环

count = 0

f = open('无题','r',encoding='utf-8')

for line in f:

    if count == 3:

        print('%%%%####%%%%')

        count+=1

        continue

    print(line.strip())

    count+=1

f.close()

 

运行结果:

昨夜星辰昨夜风

画楼西畔桂堂东

身无彩凤双飞翼

%%%%####%%%%

南京

江苏

中国

 

 


示例3 readlines方法:

print("readlines方法,会将每行的内容组成一个列表打印")

f = open('无题','r',encoding='utf8')

c = f.readlines()

print(c)

print(id(c))

print(id(f))

for i in c:

    print(i.strip())

print("遍历方法")

f.seek(0) #将文件指针设置到初始位置,就是文件开头

for i in f:

    print(i.strip())

f.close()  #文件的操作中,close()方法一定不能忘记

 

运行结果:

readlines方法,会将每行的内容组成一个列表打印

['昨夜星辰昨夜风\n', '画楼西畔桂堂东\n', '身无彩凤双飞翼\n', '心有灵犀一点通\n', '南京\n', '江苏\n', '中国']

38154568

3902272

昨夜星辰昨夜风

画楼西畔桂堂东

身无彩凤双飞翼

心有灵犀一点通

南京

江苏

中国

遍历方法

昨夜星辰昨夜风

画楼西畔桂堂东

身无彩凤双飞翼

心有灵犀一点通

南京

江苏

中国

 

 

 

文件的tell() seek()方法


 示例:

f = open('无题','r',encoding='utf8')

f.read(4)

print('当前光标位置',f.tell())

 

f.seek(10)

print('当前光标位置',f.tell())

f.close()

 

#read时,一个中文算三个字符

运行结果:

当前光标位置 12

当前光标位置 10

 

文件操作之flush方法


 

import sys,time

 

for i in range(20):

    sys.stdout.write("#")

    sys.stdout.flush()

    time.sleep(1)

 

 

truncate方法


 

f = open('test','w')

f.write("hello")

f.write("\n")

f.write("python")

f.flush() #这样不用执行close方法,内存中的数据,就会写入到disk

f.close()

 

f = open('test','a')

f.truncate(2)  #截断方法,光标从2开始往后截取

f.close()

 

 

 文件常用的方法汇总如下:

#-- 文件基本操作 

    output = open(r'C:\spam', 'w')          # 打开输出文件,用于写 

    input = open('data', 'r')               # 打开输入文件,用于读。打开的方式可以为'w', 'r', 'a', 'wb', 'rb', 'ab'等 

    fp.read([size])                         # size为读取的长度,以byte为单位 

    fp.readline([size])                     # 读一行,如果定义了size,有可能返回的只是一行的一部分 

    fp.readlines([size])                    # 把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长。 

    fp.readable()                           # 是否可读 

    fp.write(str)                           # 把str写到文件中,write()并不会在str后加上一个换行符 

    fp.writelines(seq)                      # 把seq的内容全部写到文件中(多行一次性写入) 

    fp.writeable()                          # 是否可写 

    fp.close()                              # 关闭文件。 

    fp.flush()                              # 把缓冲区的内容写入硬盘 

    fp.fileno()                             # 返回一个长整型的”文件标签“ 

    fp.isatty()                             # 文件是否是一个终端设备文件(unix系统中的) 

    fp.tell()                               # 返回文件操作标记的当前位置,以文件的开头为原点 

    fp.next()                               # 返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。 

    fp.seek(offset[,whence])                # 将文件打操作标记移到offset的位置。whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。 

    fp.seekable()                           # 是否可以seek 

    fp.truncate([size])                     # 把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。 

    for line in open('data'):  

        print(line)                         # 使用for语句,比较适用于打开比较大的文件 

    open('f.txt', encoding = 'latin-1')     # Python3.x Unicode文本文件 

    open('f.bin', 'rb')                     # Python3.x 二进制bytes文件 

    # 文件对象还有相应的属性:buffer closed encoding errors line_buffering name newlines等 

 

 

posted @ 2020-07-20 21:20  道生一_三生万物  阅读(226)  评论(0编辑  收藏  举报
returnTop $(function(){ $('#returnTop').click(function () { $('html,body').animate({ scrollTop: '0px' }, 800); returnfalse; }); });