zoukankan      html  css  js  c++  java
  • Python中文件的操作

    文件操作

    Python提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用file对象做大部分的文件操作。

    文件:硬盘中一块存储空间(虚拟的文件)

    文件操作:根据文件名来操作硬盘的那块存储空间,操作方式 读read 写write

    必需的三个步骤:

    1.打开文件

    2.操作文件

    3.关闭文件

    一、打开文件

    必须先用python中的内置函数open()打开一个文件,创建一个file,相关的辅助方法才可以调用它进行读写。

    file object = open(file_name,mode,encoding)
    各个参数的细节如下:
    file_name:文件路径加文件名,file_name变量是一个包含了你要访问的文件名称的字符串值。
    mode:mode决定了打开文件的模式:只读,写入,追加等,默认文件访问模式为只读(r)。
    encoding:设置编码方式。
    

    二、操纵文件

    模式 描述
    r 以只方式打开文件,文件指针放在文件开头,这是默认值。
    w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    b 以二进制打开一个文件进行操作,与r,w,a合用,操作时不需要关心文件编码
    打开一个文件用于读写。与r,w,a合用,对文件的操作决定于合用的方法。

    操作文件的方法:

    模式 描述
    file.close() 关闭文件。关闭后文件不能再进行读写操作。
    file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
    file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
    file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。
    file.next() 返回文件下一行。
    file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。
    file.readline([size]) 读取整行,包括 " " 字符。
    file.readlines([sizehint]) 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizeint较大, 因为需要填充缓冲区。
    file.seek(offset[, whence]) 设置文件当前位置
    file.tell() 返回文件当前位置。
    file.truncate([size]) 截取文件,截取的字节通过size指定,默认为当前文件位置。
    file.write(str) 将字符串写入文件,返回的是写入的字符。
    file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

    seek方法讲解

    必须在b模式下操作,seek中偏移的是字节

    方法:seek(偏移量, 偏移位置)
    偏移量:移动的字节数,负数是结合模式12往前偏移
    偏移位置:
     -- 0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移 | 2 - 从文件末尾开始偏移
     
    文件内容为“b'你好1234567890'”
    游标读
    with open('source.txt', 'rb') as f:
        d1 = f.read(11)
        print(d1)
        # print(d1.decode('utf-8'))
    
        当前游标的位置
        print(f.tell())
    
        游标操作 - 从末尾位置开始
        f.seek(-3, 2)
        d2 = f.read()
        print(d2.decode('utf-8'))  # 890
    
        游标操作 - 从当前位置开始
        f.seek(-3, 1)
        d2 = f.read()
        print(d2.decode('utf-8'))  # 34567890
    
        游标操作 - 从头开始
        f.seek(3, 0)
        d2 = f.read()
        print(d2)
        print(d2.decode('utf-8'))  # 好1234567890
    

    三、关闭文件

    File对象的close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。

    当一个文件对象的引用被重新指定给另一个文件时,Python会关闭之前的文件。用close()方法关闭文件是一个很好的习惯。fileObject.close();

    四、with方法

    将文件的关闭交给with管理,当with中逻辑结束后,系统会自动释放文件

    with open('file_name', 'model', encoding='utf-8') as f
    	pass
    

    五、文件的复制就是先读再写

    文本类型文件的复制
    r = open('source.txt', 'r', encoding='utf-8')
    w = open('target.txt', 'w', encoding='utf-8')
    for line in r:  # 遍历就是一行一行读 取读文件的流
        w.write(line)
        w.flush()  # 将写入到内存中的数据刷新到硬盘中
    w.close()
    r.close()with open语法如何处理?
    r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写
    with open('source.txt', 'r', encoding='utf-8') as f1:
        with open('target.txt', 'a+', encoding='utf-8') as f2:
            for line in f1:
                f2.write(line)
    如果复制非文本类型的数据文件?
    从模式采用b模式,不需要关心编码问题
    with open('source.mp4', 'rb') as f1:
        with open('target.mp4', 'wb+') as f2:  # rb+ | wb | wb+ | ab | ab+
            for line in f1:
                f2.write(line)
    
  • 相关阅读:
    设计模式-可复用面向对象软件基础笔记
    C#--笔记
    win系统下nodejs安装及环境配置
    三步将Node应用部署到Heroku上 --转载
    Ubuntu 重启命令
    Ubuntu ssh免密登录
    Ubuntu Hadoop环境搭建(Hadoop2.6.5+jdk1.8.0_121)
    Ubuntu vim使用
    Scala学习——array与arraybuffer的区别(初)
    Scala学习——可变参数(初)
  • 原文地址:https://www.cnblogs.com/linwow/p/10693789.html
Copyright © 2011-2022 走看看