zoukankan      html  css  js  c++  java
  • python3速查参考- python基础 5 -> 常用的文件操作

     文件的打开方式


     

    打开方式 详细释义
    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等  
  • 相关阅读:
    常用坐标系椭球参数整理
    ArcEngine编辑保存错误:Unable to create logfile system tables
    ArcEngine:The XY domain on the spatial reference is not set or invalid错误
    dockManager中DockPanel的刷新问题!
    ibatis实现Iterate的使用
    mongodb用子文档做为查询条件的两种方法
    Eclipse中的文件导航插件StartExplorer
    mongoVUE的增删改查操作使用说明
    什么是脏读,不可重复读,幻读
    转:Maven常用命令
  • 原文地址:https://www.cnblogs.com/wuzhiming/p/7806926.html
Copyright © 2011-2022 走看看