文件读写
读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
![读写.png](https://img-blog.csdnimg.cn/img_convert/78e09f007716c0e63a43d4b1957f514d.png)
故此,我们要完成一个文件的读写需要先打开文件——读写操作——关闭文件。
打开文件
如何打开一个文件呢?是不是还需要找到文件所在的位置呐?
open()方法
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)
一般形式:
fp = open(file,mode,rencoding)
参数说明:
file: 必需,文件路径(相对或者绝对路径)
mode: 可选,文件打开模式,默认为r
========= ===============================================================
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)
========= ===============================================================
不同mode可以相互灵活组合:r、rb、w、wb等
encoding: 一般使用utf8编码
文件位置
一个文件的位置分为两种:绝对位置 和 相对位置。
绝对位置:从盘符开始输入路径,比如:
fp = open("E:\ai_03\code\ai_03_python\day07\data.txt","w", encoding="utf8")
但是这么输入路径"\和后面的内容"很有可能会变成转义字符的作用,所以我们可以这么写:
fp = open(r"E:\ai_03\code\ai_03_python\day07\data.txt", "w", encoding="utf8")
相对位置:相对位置存在i相对的概念, ./ 表示调取的文件和打开位置在同级文件夹下 , …/ 表示在上级目录下。
f2 = open(r"./day04/homework", "r", encoding="utf8")
表示在同一个文件下打开day04/homework文件
读文件
文件打开成功后,我们可以进行下一步操作:读文件内容
如果文件成功打开,调用read方法可以把内容读到内存,用一个str对象接收:f.read()
假设打开了文件:
f2 = open(r"../day04/homework", "r", encoding="utf8")
文件内有以下内容:
使用循环去除列表中的重复值
在jd的字典里提取出 (所有评论 *)中的
评论数据content,店家回复评论 replies中的content
手机颜色 productColor 地址 location
手机名称 referenceName
调用方法
read()方法:
print(f2.read(1)) # read 传参 取几个字符
print(f2.read()) # read 不传参 取所有数据
----------------------
输出结果:
使 #当一个字符被读取后,相当于在文件中拿走了
---
用循环去除列表中的重复值 #因为“使”被读走了,后面再读取就拿不到了
在jd的字典里提取出 (所有评论 *)中的
评论数据content,店家回复评论 replies中的content
手机颜色 productColor 地址 location
手机名称 referenceName
readline()方法:
print(f2.readline()) #readline 不带参数 读取一行
print(f2.readline(5)) # 带参数 读几个字符
print(f2.readline(100))# 参数如果过大 也不会超过这一行
----------------------------
输出结果:
使用循环去除列表中的重复值
在jd的字
典里提取出 (所有评论 *)中的
readlines()方法:返回的是列表
print(f2.readlines(34)) # 参数没到一行 读一行 参数超过一行读完下一行
print(f2.readlines()) # 读取所有的行 存入列表中
-------------------------
['使用循环去除列表中的重复值\n', '在jd的字典里提取出 (所有评论 *)中的\n']
['评论数据content,店家回复评论 replies中的content\n', '手机颜色 productColor 地址 location\n', '手机名称 referenceName']
写文件
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或写二进制文件:
f2 = open(r"./wd", "w", encoding="utf8")
调用方法
write()方法:
f2.write("nihao helloworld\n") # write 往里写入字符串
----------
文件内:
nihao helloworld
写完之后运行,进入打开的文件中,会发现内容已经被写入。
writelines()方法:
# writelines可以写入字符串列表 把列表合并成大字符串
f2.writelines(["asdad", "dasdadada", "\n", "eeeeee"])
------------
文件内展示:
asdaddasdadada
eeeeee
关闭文件
完成文件的操作后,关闭文件是一个好习惯,因为它可以释放系统资源,并确保所有的数据都被正确地写入文件。
close()方法
比如,上方打开的文件f2,使用close()方法将它关闭:
f2.close()
完成操作后,这样操作就关闭文件了。
with语句
由于文件读写时都有可能产生IOError,一旦出错,后面的f2.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,Python引入了with语句来自动调用close()方法.
# with: open一个文件不需要关闭文件
# 如果能够一次性读写完 用这个比较好
with open(r"./wd", "w", encoding="utf8") as f2:
f2.write("nihao")
这样操作,读写完之后,文件会自己关闭。
总结
本篇介绍了:
- 打开文件:使用open()方法
- 读文件:
- read()方法:read 传参取几个字符,read 不传参 取所有数据
- readline()方法:不带参数 读取一行 ,带参数 读几个字符
- readlines()方法:返回的是列表,带参数没到一行 读一行 ,参数超过一行读完下一行。没带参数,读取所有的行
- 写文件:
- write()方法:往里写入字符串
- writelines()方法:writelines可以写入字符串列表 把列表合并成大字符串
- 关闭文件:
- close()方法:操作步骤完成后编写,关闭文件
- with语句:保证无论是否出错都能正确地关闭文件