『7x24小时有问必答』

---

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  json

data={"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后,欢迎关注~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码