读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)
open方法
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)
完整形式:
参数说明:
- file: 必需,文件路径(相对或者绝对路径)
- mode: 可选,文件打开模式,默认为r
- encoding: 一般使用utf8编码
- errors: 报错级别
- newline: 区分换行符
- buffering: 设置缓冲
- closefd: 传入的file参数类型
常用的mode
========= ===============================================================
Character Meaning
--------- ---------------------------------------------------------------
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
'+' open a disk file for updating (reading and writing)
写文件
写入文件时,可以使用write()或writelines()方法。
if __name__ == '__main__':
fp = open(r"F:\code\data.txt", "w",encoding="utf8")
# write 往里写入字符串
fp.write("2024 helloworld\n")
print(fp.writable())
fp.writelines("2024\n")
# writelines可以写入字符串列表 把列表合并成大字符串
fp.writelines(["2024", "07", "17"])
fp.close()
#输出结果:True
读文件
if __name__ == '__main__':
f2 = open(r"./data.txt", "r", encoding="utf8")
# read 不传参 取所以数据
# read 传参 取几个字符
# 读取时候 如果同一次读取 就继续往后读
print(f2.read(1))
print(f2.read(2))
print(f2.readline())
print(f2.readline())
# readline 不带参数 读取一行
# 带参数 读取几个字符
print(f2.readline(6))
# 如果参数过大 也不会超过这一行
print(f2.readline(100))
# readlines 返回的参数列表
# 参数没到一行 读一行 参数超过一行读完读下一行
print(f2.readlines(10))
# 读取所有的行 存入列表中
print(f2.readlines())
f2.close()
#输出结果:
#2
#02
#4 helloworld
#2024
#202407
#17
#[]
#[]
with语句
with 语句是 Python 中的一个非常有用的特性,它主要用于管理资源,比如文件、网络连接、线程锁等。通过使用 with 语句,可以确保所使用的资源在使用后能够正确地被清理或释放,即使在发生异常的情况下也是如此。这种方式避免了因为忘记释放资源而导致的资源泄露问题。
if __name__ == '__main__':
for i in range(10):
pass
# with open一个文件不需要关闭文件
# 如果能够一次性写完 用这个比较好
with open("./data.txt", "r", encoding="utf8") as f3:
print(f3.readline(20))
pass
#输出结果:2024 helloworld
注意事项
- 使用with语句打开文件是一个好习惯,因为它可以确保文件在使用后会被正确关闭,即使在读写文件时发生异常也是如此。
- 读取文件时,如果文件很大,不建议一次性读取整个文件到内存中,而是应该使用逐行读取或分批读取的方式来减少内存使用。
- 写入文件时,如果文件不存在,open()函数在’w’、'a’等模式下会自动创建文件。如果文件已存在,'w’模式会覆盖原有内容,'a’模式会在文件末尾追加内容。
- 当处理文本文件时,默认会以系统的默认编码(如UTF-8在多数现代系统中)来读取和写入文件。如果需要处理特定编码的文件,可以在open()函数中使用encoding参数指定编码方式。例如,open(‘example.txt’, ‘r’, encoding=‘utf-8’)。