加载中...

文件扩展模式

当然,我可以帮你将这些Python代码转化为Markdown格式的笔记。以下是你的Markdown笔记:


Python中的文件操作的扩展模式

在Python中,文件操作的模式主要有读模式(r)、写模式(w)、追加模式(a),以及它们的扩展模式(r+, w+, a+)。

1. 读写模式(r+

读写模式允许你先读取文件,然后再写入文件。当你打开一个文件时,文件指针将会放在文件的开头。这是默认模式。

fp = open("ceshi3.txt", mode="r+", encoding="utf-8")
res = fp.read()
fp.write("ab")
fp.seek(0)
print(fp.read())
fp.close()

2. 写读模式(w+

写读模式允许你先写入文件,然后再读取文件。如果文件存在,它将会被清空。如果文件不存在,将会创建一个新文件。

fp = open("ceshi4.txt", mode="w+", encoding="utf-8")
fp.write("abc")
fp.seek(0)
print(fp.read())
fp.close()

3. 追加读模式(a+

追加读模式允许你先写入文件,然后再读取文件。如果文件存在,新的数据将被写入到文件的末尾。如果文件不存在,将会创建一个新文件。

fp = open("ceshi5.txt", mode="a+", encoding="utf-8")
fp.write("def")
fp.seek(0)
print(fp.read())
fp.close()

4. seek(), tell(), read()函数

  • seek(offset, whence):改变文件指针的位置。offset表示偏移量,whence表示偏移的参考位置(0表示文件开头,1表示当前位置,2表示文件末尾)。

  • tell():返回文件指针的当前位置,以字节为单位。

  • read(size):从文件中读取size个字符。

#文件里如过只有  我我我我  在utf-8模式下 一个汉字三个字节
fp = open("ceshi5.txt", mode="r+", encoding="utf-8")
fp.seek(4)
res = fp.tell()
print(res)  # 输出:4
这种操作
fp.read(2)
print(fp.tell())  # 输出:6
fp.close()

5. 刷新缓冲区flush

# 当文件关闭的时候自动刷新缓冲区
# 当整个程序运行结束的时候自动刷新缓冲区
# 当缓冲区写满了  会自动刷新缓冲区
# 手动刷新缓冲区
fp = open("ceshi1.txt",mode="a",encoding="utf-8")
fp.write("abc")

# 手动刷新缓冲区,直接把内容写入到文件
fp.flush()

while True: #如果无8 9 行  数据会在缓冲区停止
	pass

fp.close()

6. 使用with语句

with语句可以自动实现文件关闭操作,使代码更简洁。

with open("集合3.png", mode="rb") as fp1, open("集合4.png", mode="wb") as fp2:
    res = fp1.read()
    fp2.write(res)

7. 文件相关的函数

readable()

writeable()

fp = open("ceshi1.txt",mode="r",encoding="utf-8")
#readable()	    功能: 判断文件对象是否可读
print(fp.readable())
#writable()	    功能: 判断文件对象是否可写
print(fp.writable())

# 遍历fp文件对象
for i in fp:
	print(i)

readline()

​ 功能: 读取一行文件内容

with open("ceshi1.txt",mode="r",encoding="utf-8") as fp:
	res = fp.readline()
	print(res)
	res = fp.readline()
	print(res)
	res = fp.readline()
	print(res)
	res = fp.readline()
	print(res)

#一次读所有的内容
with open("ceshi1.txt",mode="r",encoding="utf-8") as fp:
	# 先读取一行
	res = fp.readline()
	# 判断是不是空,不是空在循环
	while res:
		print(res)
		# 在读取一行,放到循环中判断.
		res = fp.readline()
        
#注意点:readline(读取的字符数)
with open("ceshi1.txt",mode="r",encoding="utf-8") as fp:
	"""
	读取的字符数量 > 实际当前行字符数量的时候 => 按照当前行读取
	读取的字符数量 < 实际当前行字符数量的时候 => 按照实际数量来读
	"""
	res = fp.readline(300)
	print(res)

readlines()

lst_new = []
with open("ceshi1.txt",mode="r+",encoding="utf-8") as fp:
	lst = fp.readlines() #列表
	for i in lst:
		lst_new.append(i.strip())
print(lst_new)

writelines()

注意点,内容必须是字符串,不能是整型

lst = ['床前明月光', '疑是地上霜', '举头望明月', '低头想家乡']
with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp:
	fp.writelines(lst)

### 实现效果:加入换行效果,并且插入一句话:王文真帅呀 , 插在低头想家乡的前面
lst_new = []
# 先把内容插入到原列表中
lst.insert(-1,"王文真帅呀")
# 循环原列表,把每一个元素拼接\n , 放到新列表
for i in lst:
	lst_new.append(i + "\n")
print(lst_new)
# 把新列表中的每行内容插入到文件中
with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp:
	fp.writelines(lst_new)

posted @ 2024-03-01 19:37  江寒雨  阅读(29)  评论(0)    收藏  举报