# 文件操作
## open
### 文件写操作时,打开文件mode值的设定
- mode="w"对文件写操作,文件没有就创建文件,写操作时把原有文件覆盖
def datawrite(data):
with open("md3.txt",mode="w+",encoding="utf-8") as f:
f.write(data)
datawrite("我爱学习python")
datawrite("我叫林明均")
结果:文件里:我叫林明均
- mode="w+"对文件可写可读操作,文件没有就创建文件,写操作时把原有文件覆盖,注意读时候指针的位置,写完时(指针)在字符末端,所以要用f.seek(0)把指针返回最开始端
def datawrite(data):
with open("md3.txt",mode="w+",encoding="utf-8") as f:
f.write(data)
f.seek(0)
rdata = f.read(len(data))
print(rdata)
datawrite("我爱学习python")
datawrite("我叫林明均")
结果:
打印:我爱学习python
我叫林明均
文件里字符:我叫林明均
- mode="r+"对文件可读可写,没有文件就报错,注意读完后(指针)在字符后面,这时候如果写是跟在原字符后面
#原来文件字符:我叫林明均
def datawrite(data):
with open("md3.txt",mode="r+",encoding="utf-8") as f:
# f.seek(0)
rdata = f.read()
print(rdata)
f.write(data)
datawrite("你喜欢编程吗")
datawrite("你喜欢编程吗")
结果:打印:我叫林明均
文档:我叫林明均你喜欢编程吗
- mode="a"在原来字符串后面追加写,没有文件就创建
- mode="a+"在原有字符后面追加写,并且可读,但是注意(指针)位置,如果要读,需要用f.seek()指定指针位置
#文件原来有:我叫林明均
def datawrite(data):
with open("md3.txt",mode="a+",encoding="utf-8") as f:
# f.seek(0)
f.write(data)
f.seek(0)
rdata = f.read()
print(rdata)
datawrite("你喜欢编程吗")
结果:
文件和打印结果:我叫林明均你喜欢编程吗
- mode="wb/rb/wb+/rb+/ab+/ab"以二进制读写,open()不能带encode参数,而且读回的参数是二进制的(以16进制方式显示),需要解码(rdata.decode(encoding="utf-8"))才能显示,读的时候要对字符编码(data.encode(encoding="utf-8"))
#原文件里面有:我叫林明均
def datawrite(data):
with open("md3.txt",mode="rb+") as f:
# f.seek(0)
# f.write(data)
# f.seek(0)
rdata = f.read()
print(rdata)
print(rdata.decode(encoding="utf-8"))
f.write(data.encode(encoding="utf-8"))
datawrite("你喜欢编程吗")
结果:
文件:
我叫林明均你喜欢编程吗
打印:b‘\xe6\x88\x91\xe5\x8f\xab\xe6\x9e\x97\xe6\x98\x8e\xe5\x9d\x87‘
我叫林明均
## read
### f.read()
- 全部读取或者指定位数读取
#文件中:
林明均
林明伟
美丽阳光家园
def dataread():
with open("md3.txt",mode="r",encoding="utf-8") as f:
d = f.read(8)
print(len(d))
print(d)
dataread()
结果:
8
林明均
林明伟
### f.readlines()
- 读取整个文件,以列表方式返回,列表中字符串后换行\n不去除,可以用for...in把列表分成行
#文件中:
林明均
林明伟
美丽阳光家园
def dataread():
with open("md3.txt",mode="r",encoding="utf-8") as f:
list = f.readlines()
print(list,type(list))
for i in range(len(list)):
# print(list[i])
list[i]=list[i].rstrip(‘\n‘)
print(list)
dataread()
结果:
[‘林明均\n‘, ‘林明伟\n‘, ‘美丽阳光家园\n‘] <class ‘list‘>
[‘林明均‘, ‘林明伟‘, ‘美丽阳光家园‘]
### f.readline()
- 每次只读一行,返回行字符串,用于大文件读取
#文件中:
林明均
林明伟
美丽阳光家园
def dataread():
with open("md3.txt",mode="r",encoding="utf-8") as f:
d = f.readline()
print(len(d))
print(d,type(d))
dataread()
4
林明均
<class ‘str‘>
### f.seek()
- 指针光标设置
## write
### f.write("string")
- 全部写入
### f.writelines([])
- 按行写入,串入字符串列表,而且每个字符串加\n换行
x = ["姓名\n","学校","1\n"]
def datawrite(data):
with open("md3.txt",mode="w",encoding="utf-8") as f:
f.writelines(x)
datawrite(x)
结果:
姓名
学校1
*XMind - Trial Version*
原文:https://www.cnblogs.com/shalaotou/p/14651108.html