• Python学习之路4


    文件操作

    文件操作大概分三步:

    1. 把文件打开。
    2. 操作文件。
    3. 把文件关上。

    打开文件

    打开文件用open()函数,打开成功后返回一个资源,具体语法如下。

    open(要打开的文件,打开方式,打开文件的格式,默认为utf-8)
    #例如
    f = open('passengers.txt','r',encoding='utf-8')
    

    上例用open以只读的模式打开文件,因为该文本是utf-8编码的,所以第三个参数是utf-8

    • w 模式是写入,是创建一个新文件的写,所以如果已经有了该文件就会被覆盖掉,注意安全!
    • a 模式是追加模式,可读;不存在则创建;存在则只追加内容;

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

    • r+,可读写文件。【可读;可写;可追加】
    • w+,写读
    • a+,可读,可追加

    "U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)

    • rU
    • r+U

    "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

    • rb #当加b时,就不用写encoding参数了
    • wb #用二进制打印出来的结果会包裹在 b' 和 ' 中
    • ab

    读取文件

    data = f.read() #然后用read读取文件,里面可以传参输入5就是读5个字符,不输入就是读所有字符
        #读取所有内容,文件指针就移动到了文件末尾
    data = f.readline() #读取一行内容 data = f.readlines() #将每一行变成一个元素,组成一个列表 #注意,readlines是将文件内容读取后放到内存里,所以它只能读小文件,不能读大文件

    下面是读取大文件最好的方式

    for line in f:
        print(line) 
    #这是读取大文件最好的方式,每次只读一行到内存当中,读下一行的时候就会覆盖当前内存当中的数据
    

    写入文件

    f.write('这里是写入的内容') #用write来写入内容
    
    print(f.tell()) #返回指针的位置
    f.seek(0) #移动指针的位置,0代表移动到第0个的位置上
    print(f.encoding) #打印文件的编码
    print(f.fileno()) #打印文件的编号
    print(f.name) #打印打开的文件名字
    print(f.seekable()) #判断文件是否可读
    print(f.writable()) #判断文件是否可写
    print(f.flush()) #强制刷新缓存
    print(f.closed) #判断文件是否关闭
    f.truncate(10) #从头开始截取10个字符
    

    关闭文件

    手动关闭文件用close()函数。

    f.close() #关闭文件
    

    自动关闭文件。

    with open() as f1:
        pass
        pass
        # 资源只会在with里面打开,如果执行完毕则会自动关闭资源
    
    #并且可以用下面这种方式同时打开多个资源
    with open() as f1,open() as f2 ,
        open() as f3,open() as f4:
        pass
        pass

    ##############下面是一个修改文件的案例##############

    f = open('passengers','r',encoding='utf-8')
    f_new = open('new','w',encoding='utf-8')
    for line in f:
        if "漂浮在一片无奈" in line:
            line = line.replace('漂浮在一片无奈','人类的渺小')  # replace函数在字符串操作文章中可见
        f_new.write(line)
    f.close() 

      其实就是将一个文件的内容在内存中修改完后写入到另一个文件中
      因为Python中没有直接修改文件内容的方法。

    #############修改文件的另一种方法##################

    file_data = ""
    with open(file,"r",encoding="utf-8") as f:
        for line in f:
            if old_str in line:
                line = line.replace(old_str,new_str)
            file_data += line
    with open(file,"w",encoding="utf-8") as f:
        f.write(file_data)
    

      这种方法是先将所以的内容都读出来,并且再写到同一个文件中。

    编码之间的转换

    需知:
    1.在python2默认编码是ASCII,python3里默认是unicode。
    2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),so utf-16就是现在最常用的unicode版本,不过在文件里存的还是utf-8,因为utf8省空间。
    3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string。

    原理图:

    utf-8转gbk:
    我需要先用decode()解码成为Unicode,然后再用encode()转换成gbk
    decode()函数传入一个参数,参数为我当前的编码是什么,或者说我要将什么编码转换成Unicode;
    encode()函数传入一个参数,参数为我要转换成什么编码
    如果不传参则默认是utf-8
    gbk转utf-8也是同理

    也就是说Unicode作为中间编码,用来完成utf-8和gbk之间的转换。

    str = '你好' #假设当前为utf-8   注意:Python3里面的默认编码为Unicode
    str = str.decode('utf-8') #将utf-8转换为Unicode
    str = str.encode('gbk') #将Unicode转换为gbk
    print(str)
    

    如果该文件为gbk,同时Python3的默认编码又是Unicode,则需要告诉程序不要按照默认的编码去执行,要按照gbk的编码去执行,这时就要在文件最顶端声明文件编码格式如下:
    #-*- coding:gbk -*-
    Python3默认是Unicode,而文件又是utf-8类型,两个编码不统一输入中文还不会乱码是因为utf-8是Unicode的一个扩展集,所以Python3默认支持中文不乱码。

    在Python3中执行了encode()后,除了将编码改变了之外,还将它变为byte类型。

  • 相关阅读:
    【基础】Oracle基础2
    【基础】Oracle基础1
    【基础】ORACLE中on commit preserve rows和 on commit delete rows的区别
    【函数】ORACLE中MULTISET 的用法
    【基础】ORACLE中的spool 命令
    【基础】ORACLE中substr的用法
    【练习】mysql源码安装
    关于并行执行(parallel executing)的认识
    关于DRM的理解
    打印Excel文件时如何不显示页眉和页脚
  • 原文地址:https://www.cnblogs.com/vector121/p/7552741.html
Copyright © 2020-2023  润新知