13.文件
文件路径
想要访问或修改文件,首先你要给出文件的路径(Linux下用斜杠/,Windows下用反斜杠\,下面举例均用Windows)。可以有两种表示方式:
以我们要编译运行的.py文件为基准,给出相对该目录而言的文件路径
例如要访问a.txt
情况一:a.txt和file_test.py在同一级目录下,因此相对路径就直接是"a.txt"即可
情况二:假设有一个叫做set的文件夹,a.txt在该文件夹里,那么相对路径就是"set\a.txt"
提供完整的路径,一般绝对路径较长,推荐先用变量储存,后续直接使用变量
如上面的情况一,它的绝对路径是"D:\code_contemporary\python\myfile\a.txt"
但是Windows下的反斜杠路径有时会被理解为转义字符,所以解决方法有三种:
直接用斜杠/,python会自动兼容
用双反斜杠\\,说明\是一个普通字符
前面加一个r,比如r"myfile\a.txt",表示以原始字符串方式指定路径。
读取文件
直接读取
通过.read()方法,一次性把整个文件内容读成一个字符串。
# 使用关键字with,让python接管文件的关闭,无需手动close,既安全又省心# open()是打开文件的函数,会返回一个表示该文件的、可供你操作的对象,存储在我们指定的变量file_object里with open(r"set\a.txt") as file_object: #.read()方法读取文件全部内容,并将其作为一个长长的字符串存储在变量contents中 contents=file_object.read() print(contents) 运行结果:
通过列表读取
使用关键字with时,open()函数返回的文件对象只能在with代码块内使用。因为with使用了上下文管理器,会在这个代码块结束后自动调用close()函数。
但是我们可以使用.readlines()方法,它会返回一个列表,其中每个元素都是文件的一行内容。我们定义一个列表接收它,就可以在with代码块外轻松访问文件中的数据。
(注:此时的数据只是文件内容的副本,就算修改该列表也不会影响到原文件)
with open(r"set\a.txt") as file_object: # 用列表lines来接收 lines=file_object.readlines()for line in lines: print(line)但是我们观察输出格式,每一行结束都换行两次,这显然不是我们想要的结果。
这是因为,print()函数会给每一次打印结尾添加一个换行,但文件内容每一行结尾又有一个换行,一叠加就是换行两次。解决方法也很简单,回忆一下第一期我们讲过的字符串处理方法:
先补充一下:rstrip()会删除字符串末尾的所有空白字符,并不是只有空格。因为在python中,空白字符是一个集合,包含空格" ",制表符"\t",换行符"\n",换页符"\f"等。
因此,我们可以把上面代码第4行,改成 print(line.rstrip()),去掉每一行内容最后的换行符。完整代码如下:
with open(r"set\a.txt") as file_object: # 用列表lines来接收 lines=file_object.readlines()for line in lines: print(line.rstrip()) 这样就得到了完美的输出结果
写入文件
open()函数接收两个参数,第一个是文件名,第二个是打开方式:
只读模式"r",文件必须存在(默认参数值就是r)
写入模式"w",文件不存在自动创建,存在则覆盖写入
附加模式"a",文件不存在自动创建,存在则追加写入
如果是r、w、a后面加上"+"号,那么就是原有模式规则完全不变,只同时打开读+写权限。
写入文件用到的方法是.write(),用法见下面的程序:
with open("b.txt","a") as file_object: # 用列表lines来接收 file_object.write("Hello,world!\n") file_object.write("Hello,sky!\n") 效果如下,在该目录里创建了一个b.txt的文件,文件内容如右边缩略图所示:
JSON模块
和普通存文件相比,JSON格式统一通用,不用自己去写解析代码,能够存放各种复杂数据,灵活又不易出错,并且能自带数据类型,而直接读文件需要强制转换。
JSON模块提供了两种方法,
.dump()方法:
把数据类型转换成字符串,并存入文件
两个参数,一个是要写入的数据,另一个是打开的文件对象
.load()方法:
接收一个打卡的文件对象,读取其中JSON文本,解析成对应的数据对象。
一个参数,是要打开的文件对象
老规矩,用代码展示:
# 导入json模块import jsondata={"name":"tina","age":20}要存的数据存入with open("test.json","w") as file_object: json.dump(data,file_object)取出with open("test.json","r") as file_object: read_data=json.load(file_object)print(read_data) 输出如下
我是一只思绪漫游的00后,欢迎关注~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!