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)
原文地址:https://www.cnblogs.com/linwow/p/10693789.html