目录
10.1 读取文件
10.1.1 读取文件全部内容及文件的各行
10.1.2 相对路径与绝对路径
10.2 写入文件
10.3 异常
10.4 存储非字符串数据
当我要读取一个与当前.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
那我要读取其他文件夹中的文件该怎么办?其实只要设置好路径即可。
相对路径是相对于当前文件的路径,绝对路径是在电脑中位置。
例如:当前.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)
使用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())
即出现的错误。那要如何绕过异常,执行程序?例:
try: # 尝试运行
print(5/0)
except ZeroDivisionError: # 要是是这种错误,则......
print('有ZeroDivisionError')
else: # try中尝试运行,没有问题,则.....
print(5/1)
# 该程序最终输出:有ZeroDivisionError
上文讲述了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]
# [1, 2, 3]
本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢,一起加油吧!