文件操作
1、打开文件
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
file:文件的路径。
mode:打开文件的模式,默认只读。
buffering:文件的缓冲策略。
encoding:文件解码方式(必须是在字符串模式)。
errors:当编码错误时的提示信息(只能在文本模式)。
newline:控制换行方式,在行的末尾是None, '', '\n', '\r', and '\r\n'。
closefd:如果closefd为False,底层文件描述符将保持打开状态,当文件关闭时或者给定文件名时,此方法无效,在这种情况下必须是真的。

下面是读取文件示例:如果文件不存在会报错。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
file_open = open("test1.txt",mode="rb")
print(file_open.read())
file_open.close()

# 打印内容如下:
FileNotFoundError: [Errno 2] No such file or directory: 'test1.txt' 

下面是文件读取的操作:

readline(limit:int):如果不写参数默认读取一整行,如果填写参数将限制读取的字符个数,返回一个str。

file_open = open("test.txt",mode="r",encoding="utf-8")
print(file_open.readline()) # 不写参数读一整行
file_open.close()

# 打印内容如下
上海滩
file_open = open("test.txt",mode="r",encoding="utf-8")
print(file_open.readline(2)) # 写参数2读取两个字符
file_open.close()

# 打印内容如下:
上海

readlines(hint:int):不写参数默认读取所有内容,返回一个列表,如果指定参数,经个人测试如果参数的int值不超过文件一行的内容,将显示1行。如果参数的int值超过一行的内容,将显示一二两行,如果参数的int值大于两行的内容将显示三行,以此类推。
下面是不带参数的事例:

file_open = open("test.txt",mode="r",encoding="utf-8")
print(file_open.readlines())
file_open.close()

# 打印内容如下:
['上海滩\n', '射雕英雄传\n', '侠客行']

下面是带参数的事例:

file_open = open("test.txt",mode="r",encoding="utf-8")
print(file_open.readlines(3)) # 参数设置3
file_open.close()

# 打印内容如下:
['上海滩\n']    # 参数3没有超过第一行文件的个数所以只显示一行

file_open = open("test.txt",mode="r",encoding="utf-8")
print(file_open.readlines(4))  # 参数设置4
file_open.close()

# 打印内容如下:
['上海滩\n', '射雕英雄传\n'] # 参数4超过了一行内容,所以显示两行.

read(int):不写参数默认读取所有文件内容,

file_open = open("test.txt",mode="r",encoding="utf-8")
print(file_open.read()) # 不写参数的read()
file_open.close()

# 打印内容如下:
上海滩
射雕英雄传
侠客行

file_open = open("test.txt",mode="r",encoding="utf-8")
print(file_open.read(3)) #带参数的read(3)
file_open.close()

# 打印内容如下:
上海滩 # 打印三个字符 

由上面的打印可以知道,如果打开文件的模式是文本模式读取三个字符

file_open = open("test.txt",mode="rb") 
print(file_open.read(3)) # 带参数的read(3)
file_open.close() 

# 打印内容如下:
b'\xe4\xb8\x8a' # 打印三个字节

当以字节码模式读取文件时,则读取的是三个字节。
文件的写入操作(覆盖写) mode="w"

file_write = open("test_1.txt",mode="w",encoding="utf-8")
file_write.write("我是写入的") # 
file_write.close()

效果如下:

 Python文件操作之把臂入林 Python

mode = "w"模式是覆盖写的操作,如果文件存在将删除原文件,新建一个同名的文件后在执行写的操作。如果原文件不存在执行新建的操作。
文件的追加操作:mode="a"

file_append = open("test.txt",mode="a",encoding="utf-8")
file_append.write("我是追加的")
file_append.close()

文件操作的几种模式:
r :只读(文本模式读取文件)。
a :追加,文件的末尾追加。
w :覆盖写,先清空文件,后写入文件。
rb 、wb、ab是以字节的方式操作文件,所以不需要加encoding对字节进行编码的操作。

a+ :追加 + 读 (注意 :此模式先追加在读,所以光标是在文件的末尾的,如果想要读文件,此模式需要将光标移动到要读取的位置才可以)。
w+: 覆盖写 + 读 (注意 :此模式先覆盖写在读,所以光标是在文件的末尾的,如果想要读文件,此模式需要将光标移动到要读取的位置才可以)。
r+ :读 + 写 

其它操作:
seek():移动光标(移动光标是按字节移动,不是按字符移动)。
seek(0,0):移动光标到文件开头。
seek(0,1):移动光标到当前位置。
seek(0,2):移动光标到文件末尾。

tell():查看光标当前位置(是字节码)。
truncate():截断光标以后所有数据,只保留光标前面的数据。

文件的删除、重命名操作:
重命名:rename(源文件名,从命名后的文件名)。
import os
os.rename("test.txt","test1.txt")


删除:remove(文件名)。
import os
os.remove("test1.txt")

 

路径:
文件的路径分为相对路径和绝对路径
相对路径:相对于当前目录下进行文件查找(./是当前目录, ../是上一层目录)
绝对路径:是从文件的根目录开始一层一层的进行查找,Python中使用绝对路径。例如:
G:\feiq\Recv Files\test.txt
因为"\"在字符串中有特殊意义,所以文件路径中的"\"不能被识别,下面是两种识别绝对路径的方法。
第一种在路径前面加上r来
file_read = open(r"G:\feiq\Recv Files\test.txt",mode="r",encoding="utf-8")
第二种是使用"\\"用转移符的方式
file_read = open("G:\\feiq\\Recv Files\\test.txt",mode="r",encoding="utf-8")

关于open(...)打开文件后,必须要有个close()来关闭文件句柄。否则会造成内存泄漏。
可以使用with上下文管理的方式操作文件,下面是两种方式的对比:

with open(r"test.txt",mode="r",encoding="utf-8") as file_read:
    file_read.read()

file_read = open("test.txt",mode="r",encoding="utf-8")
file_read.read() 
file_read.close() # 使用文件句柄后要关闭文件句柄

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄