文件的打开与关闭
打开文件
(1)打开并读取出文件的全部内容
helloworld.txt文件内容如下:
file_op.py代码如下:
#打开文件保存到file变量中
#打开文件,不穿参数,默认module默认是r ,只读
file=open("E:\\pythonProject\\helloworld.txt")
#读取文件内容
print(file.read())
打印内容:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
helloworld
Process finished with exit code 0
(2)文件打开之后可以做哪些操做??
1)file.name:获取文件名
file_op.py文件代码如下:
file=open("E:\\pythonProject\\test.txt","r")
#获取打开文件的文件名
print(file.name)
#判断文件是否被挂关闭
print(file.closed)
##获取文件的打开的模式是什么
print(file.mode)
打印内容:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
E:\pythonProject\test.txt
False
r
Process finished with exit code 0
注意:
#open()传入的文件可以是绝对路径,也可以直接是一个文件名
#如果是一个文件名。就从当前操做的文件所在目录下打开这个文件,如果没有这个文件,执行会报错,提示没有这个文件
file=open("test.txt")
#获取包含文件名的字符串即open()传入的第一个参数name
print(file.name)
打印结果:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
test.txt
2)file.closed:判断文件是否被关闭,返回布尔值
file=open("test.txt")
#判断文件是否被挂关闭
print(file.closed)
#关闭文件
file.close()
打印结果如下:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
False
True
Process finished with exit code 0
注意:文件打开操做结束一定要关闭文件,否则会一直占用内存
3)file.mode:获取文件的打开i模式
file=open("test.txt")
#获取文件的打开模式
print(file.mode)
打印结果:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
r
Process finished with exit code 0
文件读写
1.只读的模式:r
r是默认的模式。文件的指针将会放在文件的开头(意思是:文件打开后,光标默认定位在文件第一行第一个字符的前面,读取的时候会将光标之后的所有内容都读取出来)
test.txt文件内容如下:
1)read():不传入参数:默认读取全部
file=open("E:\\pythonProject\\test.txt","r")
print(file.read())
file.closed()
打印结果:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
my name is test
Process finished with exit code 0
2)read():传入参数,指定读取几个字符
#打开文件
file=open("E:\\pythonProject\\test.txt","r")
#读取四个字符内容
print(file.read(4))#结果:my n
file.close()
#再次打开文件
file=open("E:\\pythonProject\\test.txt","r")
#读取1个字符内容
print(file.read(1))#j结果:m
#读取1个字符内容之后,再读取4个字符内容
print(file.read(4))#结果:y na
file.close()
执行结果:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
my n
m
y na
Process finished with exit code 0
3)文件定位
1. 参考位置为文件开头
file_op.py文件代码如下:
#打开文件
file=open("E:\\pythonProject\\test.txt","r")
#读取四个字符内容
print(file.read(4))#结果:my n
#获取光标所在的位置
print(file.tell())#结果:4 这里注意:输出的是字节数,英文,数字,空格都是1个字节。所以输出光标所在的位置是4,一个汉字是2个字节,如果全部是汉字,那么就是8
#光标移动到指定位置
file.seek(0,0)#光标移动到文件的开头
print(file.read())#结果:my name is test
#光标移动到的第四个字符,光标移动参考位置是文件开头
file.seek(4,0)
print(file.read())#结果:ame is test
file.close()
执行结果如下:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
my n
4
my name is test
ame is test
Process finished with exit code 0
2.参考位置为光标当前位置
file_op.py文件代码如下:
#打开文件
file=open("E:\\pythonProject\\test.txt","r")
#读取四个字符内容
print(file.read(4))#结果:my n
#获取光标所在的位置
print(file.tell())#结果:4 这里注意:输出的是字节数,英文,数字,空格都是1个字节。所以输出光标所在的位置是4,一个汉字是2个字节,如果全部是汉字,那么就是8
#光标移动2个字符,光标移动参考位置为:光标当前所在位置
file.seek(2,1)
print(file.read())#前期结果:e is test
file.close()
执行结果:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
Traceback (most recent call last):
my n
4
File "E:/pythonProject/file_op.py", line 8, in <module>
file.seek(2,1)
io.UnsupportedOperation: can't do nonzero cur-relative seeks
Process finished with exit code 1
3.参考位置为文件末尾
file_op.py文件代码如下:
#打开文件
file=open("E:\\pythonProject\\test.txt","r")
#光标参考位置为,文件末尾
file.seek(1,2)
print(file.read())
file.close()
执行结果:与上面一样报错,也会提示:io.UnsupportedOperation错误。
报错解决办法:打开模式加b,二进制读取
test.txt内容如下:
file_op.pyd代码更新如下:
#打开文件
file=open("E:\\pythonProject\\test.txt","rb")
#读取四个字符内容
print(file.read(4))#结果:my n
#获取光标所在的位置
print(file.tell())#结果:4 这里注意:输出的是字节数,英文,数字,空格都是1个字节。所以输出光标所在的位置是4,一个汉字是2个字节,如果全部是汉字,那么就是8
#光标移动2个字符,光标移动参考位置为:光标当前所在位置
file.seek(2,1)
print(file.read())#前期结果:e is test
file.close()
代码运行结果:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
b'my n'
4
b'e is test'
Process finished with exit code 0
上面执行结果可以看到:代码不再报io.UnsupportedOperation错误。
想了解更多的seek()用法。可以参考seek()介绍章节
2.读写模式:r+
(1)先写后读
test.txt文件内容如下:
file_op.py文件代码如下:
file=open("E:\\pythonProject\\test.txt","r+")
file.write("new99")
print(file.read())
打印结果如下:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
me is test
Process finished with exit code 0
test.txt文件打开如下:
总结:先写后读,打开文件,未执行读操做,光标定位在文件的开头。新写入的内容会覆盖后面的内容。未关闭文件,就读取文件光标定位在写入内容结束的位置开始往后读取
(2)先读后写
test.txt文件内容如下:
file_op.py文件代码如下:
file=open("E:\\pythonProject\\test.txt","r+")
print(file.read())
file.write("is new 123")
print(file.read())#结果:读取内容为空
执行结果为下:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
new99me is test
Process finished with exit code 0
打开test.txt文件,内容如下:
总结:先读后写。打开文件后,执行读操做,内容读取结束,未关闭文件,此时光标定位在文件内容结束位置。所以此时执行写操做,会从内容最后位置写入,上面代码读取内容之所以为空。因为文件未关闭,光标定位在写入结束的位置开始往后读,所以读取为空
如下面的代码:file_op.py
file=open("E:\\pythonProject\\test.txt","r+")
print(file.read())
file.write("hello")
file.close()
#g关闭后重新打开i读取
file=open("E:\\pythonProject\\test.txt","r+")
print(file.read())
执行结果:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
new99me is testis new 123
new99me is testis new 123hello
Process finished with exit code 0
3.只写模式:w
如果打开的文件存在且有内容,那么会清空原有数据。重新写入新数据
4.读写模式:w+
5.追加模式:a
6.追加模式:a+
数据流
一般对于文件和图片这种,我们会选择流的方式,或者也叫比特流
比如下图代码:打开image.jpg图片是以二进制打开(wb),b代表二进制,如果写w,不加b会报错。
因为url里面存的图片就是一个数据流,所以要以二进制的形式写入到image.jpg文件中
下图就是写入的图片: