zoukankan      html  css  js  c++  java
  • 全栈测试 一 | 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 because, python is important ")

    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方法,会将每行的内容组成一个列表打印

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

    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("
    ")
    
    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等 
    
     
  • 相关阅读:
    一道经典的线程间通信的编程题
    Windows Live Writer代码插件整理
    Squeeze Excitation Module 对网络的改进分析
    IGC(Interleaved Group Convolutions)
    探秘移动网络模型
    sparse_softmax_cross_entropy_with_logits
    四行公式推完神经网络BP
    视觉跟踪:MDnet
    tensorflow API _ 6 (tf.gfile)
    tensorflow API _ 4 (Logging with tensorflow)
  • 原文地址:https://www.cnblogs.com/wuzhiming/p/13347874.html
Copyright © 2011-2022 走看看