zoukankan      html  css  js  c++  java
  • 桐花万里python路-基础篇-07-文件操作

    • 流程
      • 打开文件,得到文件句柄并赋值给一个变量
        file object = open(file_name [, access_mode][, buffering])
        参数说明
          file_name:file_name变量是一个包含了你要访问的文件名称的字符串值
          access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)
          buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认
      • 通过句柄对文件进行操作 
      • 关闭文件
        # 读文件
        f = open('abc.txt','r') #打开文件
        first_line = f.readline()
        data = f.read()# 读取剩下的所有内容,文件大时不要用
        f.close() #关闭文件
        # 写文件
        f = open('abc.txt','w',encoding="utf-8") #打开文件
        f.write("哈喽,world")
        f.close() #关闭文件
    • 打开文件模式
      • 图解说明
      • 列表说明
        模式rr+ww+aa+
        + +   +   +
          + + + + +
        创建     + + + +
        覆盖     + +    
        指针在开始 + + + +    
        指针在结尾         + +
      • 详细说明
        模式描述
        r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
        rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
        r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
        rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
        w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
        wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
        w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
        wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
        a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
        ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
        a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
        ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
    • 方法说明
      • read 可以是文字,二进制数据
        fileObject.read([count])
        # count是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,
        # 如果没传count,它会尝试尽可能多地读取更多的内容,直到文件的末尾
      • readline
        fileObject.read([count])
        # 读一行,如果定义了count,有可能返回的只是一行的一部分
      • readlines
        fileObject.readlines([count])
        # 把文件每一行作为一个list的一个成员,并返回这个list。
        # 其实它的内部是通过循环调用readline()来实现的。
        # count是表示读取内容的总长,也就是说可能只读到文件的一部分
      • write
        fileObject.write(string)
        # 把string写到文件中,write()并不会在string后加上一个换行符
      • writelines
        fileObject.writelines(seq)
        # 把seq的内容全部写到文件中(多行一次性写入),不会在行后加上一个换行符
        f = open('abc.txt', 'w+')
        f.writelines(['a', 'b', 'b'])
        f.close()
      • tell 返回文件操作标记的当前位置,以文件的开头为原点
      • seek
        fileObject.seek(offset[,whence])
        # 将文件操作标记移到offset的位置,offset相对于文件的开头来计算的,一般为正数
        # whence参数:0表示从头开始计算,1表示以当前位置为原点计算,2表示以文件末尾为原点进行计算
        # 如果文件以a或a+的模式打开,写操作时,文件操作标记会自动返回到文件末尾
        # 打开一个文件
        fo = open("foo.txt", "r+")
        string = fo.read(10)
        print("读取的字符串是 : ", string)
        
        # 查找当前位置
        position = fo.tell()
        print("当前文件位置 : ", position)
        
        # 把指针再次重新定位到文件开头
        fo.seek(0, 0)
        position = fo.tell()
        print("当前文件位置 : ", position)
        string = fo.read(10)
        print("重新读取字符串 : ", string)
        # 关闭打开的文件
        fo.close()
      • truncate
        fileObject.truncate([count])
        # 把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。
        # 如果count比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
      • flush
        fileObject.flush()
        # 刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
        # 文件关闭后会自动刷新缓冲区
      • close 刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入
      • with 为了避免打开文件后忘记关闭,可以通过管理上下文
        with open('log','r') as f:
            f.readline()
        
        # 当with代码块执行完毕时,内部会自动关闭并释放文件资源 (推荐用法)
        # 在Python 2.7 后,with又支持同时对多个文件的上下文进行管理
        with open('log1') as obj1, open('log2') as obj2:
            pass
    • 文件编码
      • 保存文件时,文件编辑器"默默地"帮文件内容做了编码工作;打开文件时,软件又默默地给做了解码的工作,将数据解码成unicode。py解释器本身就是一个软件
      • unicode是离用户更近的数据,bytes是离计算机更近的数据
      • win下的终端即cmd.exe,这个软件默认的编码解码方式是GBK,所以cmd.exe用GBK的解码方式去解码utf8自然会乱码
      • 文件保存的是gbk编码,在win 下就不用指定encoding了
      • open这个函数在py2里和py3中是不同的,py3中有了一个encoding=None参数
  • 相关阅读:
    CodeSmith实用技巧(十四):使用Progress对象
    .NET设计模式(5):工厂方法模式(Factory Method)
    CodeSmith实用技巧(七):从父模版拷贝属性
    CodeSmith实用技巧(十一):添加设计器的支持
    CodeSmith实用技巧(六):使用XML 属性
    CodeSmith实用技巧(三):使用FileDialogAttribute
    CodeSmith实用技巧(十二):自动执行SQL脚本
    CodeSmith中实现选择表字段的几点想法
    CodeSmith开发系列资料总结
    你真的了解.NET中的String吗?
  • 原文地址:https://www.cnblogs.com/zhujingxiu/p/8253496.html
Copyright © 2011-2022 走看看