• 文件的使用


    python3读取指定编码的文件
    f=open("test")           #windows操作系统的默认解码是GBK,linux的操作系统的默认解码方式utf8 f=open("test",encoding="utf8")    #默认读模式 f.truncate()      #清空原文件 f.flush() #将内存的内容强制刷新进文件
    python2中读取GBK文件
    with open('test.txt', mode='rb') as f: for row in f: print row.decode("GBK")
    buffering缓冲参数,仅允许在二进制模式下,则0表示无缓冲,1表示行
    缓冲,较大的数字指定缓冲区大小。

    打开文件的模式有:

    • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    • w,只写模式【不可读;不存在则创建;存在则清空内容】
    • x, 只写模式【不可读;不存在则创建,存在则报错】
    • a, 追加模式【可读; 不存在则创建;存在则只追加内容】

    "+" 表示可以同时读写某个文件

    • r+, 读写【可读,可写】
    • w+,写读【可读,可写】
    • x+ ,写读【可读,可写】
    • a+, 写读【可读,可写】

    "b"表示以字节的方式操作

    • rb  或 r+b
    • wb 或 w+b
    • xb 或 w+b
    • ab 或 a+b

    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

    print line,读取文件时,python2.7去掉换行
    print(line,end=' ')读取文件时,python3.6去掉换行

    --------------------读操作
    data=f.read(5)# python3读指定个数的字符,python2读取指定个数的字节
    data2=f.read(5) #从光标位置读指定个数的字符,date读取后光标已经移动到5个字符
    data=f.readline() #读取光标的那一行
    data=f.readlines() #读所有的行,结果是列表结果

    调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

    如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便。

    
    
    f = open('11.txt', 'r')
    for
    line in f.readlines(): print(line.strip()) for line in f: # 推荐使用,优化内存,可迭代对象(字符串,列表,字典,元组,文件) print(line.strip())
    with open('11.txt','r') as f:     
      for line in f:
        print line

    --------------------写操作
    f=open("test3",mode="w",encoding="utf8")
    print(f.read()) #不可读
    f.write("yyyy world2") 如果没有文件就创建一个文件,写的内容进行覆盖

    f.write("world2")  #向文件内写内容
    --------------------flush操作
    f.write("hellp test5") #先放在缓存,最后一起存入磁盘
    f.flush() #将缓存的内容立即存入磁盘

    可读可写模式 r+ w+ a+

    r+模式是追加写
    w+先覆盖,再写入以后才能读出
    f.seek(0) #将光标移动到最前面,seek按字节走
    f.seek(5) #将光标移到开始位置,不同于read()方法,它是按字节移动的
    print(f.tell())#显示当前光标的位置 
    f.seek(3,0) #将光标移到开始位置,不同于read()方法,它是按字节移动的,0从头开始      
    f.seek(-3,2) #将光标移到开始位置,不同于read()方法,它是按字节移动的,2从末尾开始         
    f.seek(1,1)  #1从当前位置开始 

    a+ 先总是在最后位置添加,不覆盖

    f.seek(0) #无论光标在任何位置,追加的内容都在最后位置添加

    ------------总结w:覆盖写 a:追加写
    r+:默认光标在开始位置, 写的追加写
    w+:覆盖写,想读取内容:seek调整
    a+: 光标默认在文件最后位置,不管光标位置,一定是追加写;想读取内容:seek调整

    seek的应用,比如断点续传

    -------- rb wb ab 二进制操作

    rb  或 r+b

    wb 或 w+b

    xb 或 w+b

    ab 或 a+b

    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

    
    
    
    
    
    
    
    

                                                              

    
    
    
  • 相关阅读:
    gitlab配置ssh连接
    java 函数编程之Consumer接口的使用
    一枚程序猿的MacBook M1详细体验报告
    【线上问题排查技巧】动态修改LOGGER日志级别
    【线上排查实战】AOP切面执行顺序你真的了解吗
    阿里巴巴Canal常见问题:重复解析/Filter失效/消费落后
    使用Binlog日志恢复误删的MySQL数据实战
    Git实战技巧:恢复被强制push -f失踪的代码
    一次完整的JVM堆外内存泄漏故障排查记录
    Java线上问题排查神器Arthas快速上手与原理浅谈
  • 原文地址:https://www.cnblogs.com/domestique/p/6749363.html
Copyright © 2020-2023  润新知