第十章 文件与异常

发布时间:2024年01月24日

目录

10.1 读取文件

10.1.1 读取文件全部内容及文件的各行

10.1.2 相对路径与绝对路径

10.2 写入文件

10.3 异常

10.4 存储非字符串数据


10.1 读取文件

10.1.1 读取文件全部内容及文件的各行

? ? ? ? 当我要读取一个与当前.py文件处于一个文件夹中的data.text时:

from pathlib import Path
path = Path('data.txt')
contents = path.read_text()
print(contents)
print("文件内容全部读出")
lines = contents.splitlines()    # 以列表的形式返回
print(lines)    # 输出:['hello,world', 'hello,world2', 'hello,world3']

? ? ? ?当读取的文件为空时,会报错。那如何判断文件是否为空?使用path.exist(),为空返回False,非空返回True.

print(path.exists())    # 输出:True

????????那我要读取其他文件夹中的文件该怎么办?其实只要设置好路径即可。

10.1.2 相对路径与绝对路径

? ? ? ? 相对路径是相对于当前文件的路径,绝对路径是在电脑中位置。

例如:当前.py文件为ten.files.py,在bookStudy文件中。我要访问data2.text和files文件夹中的data3.text。

from pathlib import Path
path2 = Path('../data2.txt')    # 相对路径
path3 = Path('files/data3.txt')
contents2 = path2.read_text()
print(contents2)

print(path3.read_text())

path4 = Path('D:/study/data2.txt')  # 绝对路径,去掉D:也可
contents4 = path4.read_text()
# 注意:计算机上的路径是 \ ,这里是 /
print(contents4)

10.2 写入文件

? ? ? ? 使用write_txt()即可。注意:会删除文件中原内容再写且只能写入字符串,其他内容报错。

from pathlib import Path
path = Path('data.txt')
path.write_text('I am writing')
print(path.read_text())
str1 = 'I am writing2'
path.write_text(str1)
print(path.read_text())

10.3 异常

? ? ? ? 即出现的错误。那要如何绕过异常,执行程序?例:

try:    # 尝试运行
    print(5/0)    
except ZeroDivisionError:    # 要是是这种错误,则......
    print('有ZeroDivisionError')
else:    # try中尝试运行,没有问题,则.....
    print(5/1)

# 该程序最终输出:有ZeroDivisionError

10.4 存储非字符串数据

? ? ? ? 上文讲述了path.write_txt()只能写入字符串。那我要写入其他数据(如数字,列表,字典等)了?一个个进行数字转字符串,列表转字符串......吗?

? ? ? ? 此时就需要json模块。json.dumps(参数)将参数转换为JSON格式的字符串,json.loads(参数)将JSON格式的字符串转换为原格式的参数。

import json
# 存储python数据结构
path = Path('data.txt')
list1 = [1,2,3]
contents = json.dumps(list1)    # 将参数转换为JSON格式的字符串
path.write_text(contents)    # 存入数据
print(path.read_text(), type(path.read_text()))    # 不用json.loads()来读

contents = path.read_text()    # 将JSON格式的字符串转换为原格式的参数
contents2 = json.loads(contents)
print(contents2, type(contents2))

# 该程序输出:
# [1, 2, 3] <class 'str'>
# [1, 2, 3] <class 'list'>

本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢,一起加油吧!

文章来源:https://blog.csdn.net/weixin_51100340/article/details/135682280
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。