题目要求:
编写如下程序
有两行数据,存放在txt文件里面(手动建立文件,并添加如下数据):
url:/futureloan/mvc/api/member/register@mobile:18866668888@pwd:123456
url:/futureloan/mvc/api/member/recharge@mobile:18866668888@amount:1000
请利用上课所学知识,把txt里面的两行内容,取出然后返回如下格式的数据:(可定义函数)
[{'url':'/futureloan/mvc/api/member/register','mobile':'18866668888','pwd':'123456'},{'url':'/futureloan/mvc/api/member/recharge','mobile':'18866668888','amount':'1000'}]
思路:
1、先将数据写入文件
2、再从文件中读取数据
3、对读取的数据进行处理、格式转换等操作
4、返回结果
5、验证
代码实现:
def write_file(filename,contents):
"""
定义写入文件的函数
:param filename:文件名(传参时可以是绝对路径,也可以是相对路径)
:param contents: 写入文件的内容
:return:
"""
with open(filename,mode="a") as f:
# for i in contents
f.write(contents)
f.write("\n")
def read_files(filename):
"""
定义读取文件的内容并对格式进行转换
:param filename: 文件名称
:return:返回结果列表
"""
# 打开文件
with open(filename, mode="r") as f:
# 读取所有行,返回的是以行为单位的列表
read_lines = f.readlines()
# 创建空列表存储最后的字典,形成嵌套字典的列表
convert_lst = []
# 循环读取每一行
for content in read_lines:
# 现将换行符替换,并将@进行分割处理
content_convert = content.replace("\n","").split("@")
# 创建一个空字典
content_dic = {}
for index in range(len(content_convert)):
# 使用冒号进行分割(将列表中的值拆开)
new_s = content_convert[index].split(":")
# 通过给键值对赋值的形式组合成字典
content_dic[new_s[0]] = new_s[1]
# 把字典作为一个整体,添加至列表中
convert_lst.append(content_dic)
# 返回结果列表
return convert_lst
验证:
if __name__ == '__main__':
write_file("infomation.txt",contents1)
write_file("infomation.txt", contents2)
res = read_files("infomation.txt")
print(res)
返回结果如下:
[{'url': '/futureloan/mvc/api/member/register', 'mobile': '18866668888', 'pwd': '123456'}, {'url': '/futureloan/mvc/api/member/recharge', 'mobile': '18866668888', 'amount': '1000'}]
ok,完成!!
总结:
1、文件写入相对容易,难点在文件读取后的处理上
2、我的难点在于分析变量的位置上,像如read_files()函数中的空字典,最开始我放在了空列表的下面,结果最后输出的只有是以下内容(重复的两个字典)
[{'url': '/futureloan/mvc/api/member/recharge', 'mobile': '18866668888', 'amount': '1000'}, {'url': '/futureloan/mvc/api/member/recharge', 'mobile': '18866668888', 'amount': '1000'}]
经过调试后,发现位置放错了,调整至循环体内,问题解决
3、基础知识要牢固!基础知识要牢固!基础知识要牢固!