文件和异常处理

文件

在Python之中读写一个文件我们使用它的内置函数open来进行操作。

写读写文件如下:

读文件时需要注意的是encoding的参数指定编码(写文件也同理):

# 第一种读取文件方式
    fs = open('hello.txt', 'r', encoding='utf-8')
    # 读所有的东西
    content = fs.read()
    print(content)
    fs.close()

# 第二种读取文件方式
    # 使用with op () as name: 的时候可以不用close
    with open('../abc/hello.txt', 'r', encoding='utf-8') as fs:
        # ./ abc找到本目录的abc   ../abc 找到上一级目录的abc    ../../找到上上级目录中的文件

        # 将文件用数组保存
        mylist = fs.readlines()
        print(mylist)

写文件:

# 异常机制  -  处理程序在运行过程中出现的意外状况的手段
# 因为不是所有的问题都能够在写程序调试程序的售后就能发现

#  代开文件 ---->    判断大小 ---->   分配内存 ---->  读取文件 ----->  关闭文件


def main():
    try:
        with open('hello.txt', 'w', encoding='utf-8') as fs:  # w完全改写文件  a表示追加问价
            fs.write('我想做燕子\n')
            fs.write('想做一只风中的野狼\n')
            fs.write('我想吃兔子')
    except FileNotFoundError as e:
        print(e)
        print('指定的文件无法打开')
    except IOError:
        print('读写文件时错误')
    print('程序执行结束.')


if __name__ == '__main__':
    main()

我们同样也可以读取一个二进制的文件wb,rb

def main():
    try:
        with open('../abc/mm.jpg', 'rb') as fs:  # 读取一个二进制的文件,这个时候就可以不用encoding
            data = fs.read()  # 将读取的数据保存在data中
            print(type(data))
        with open('../efg/girl.jpg', 'wb') as fs2:  # 写一个二进制的文件
            fs2.write(data)  # 将data写入girl.jpg中
    except FileNotFoundError as e:
        print(e)
        print('指定的文件无法打开')
    except IOError:
        print('读写文件时错误')
    print('程序执行结束.')


if __name__ == '__main__':
    main()

json文件

当我们想要将列表或者字典类的数据进行保存的时候,就要使用Json的格式进行保存数据

{
        'name': 'ljl',
        'age': 18,
        'qq': 111222,
        'friends': ['李元芳', '王大锤'],
        'car': [
            {'brand': 'auto', 'speed': 120},
            {'brand': 'Benz', 'speed': 160},
            {'brand': 'QQ', 'speed': 100}
        ],
        'num': [[123, 321], [456, 654], [789, 987]]
    }

从上面我们可以看出,Json中的数据类型和Python中的数据类型很容易找到对应的关系,如下图:


我们就可以使用Python中的json来保存json格式的数据文件:

import json


def main():
    mydict = {
        'name': 'ljl',
        'age': 18,
        'qq': 111222,
        'friends': ['李元芳', '王大锤'],
        'car': [
            {'brand': 'auto', 'speed': 120},
            {'brand': 'Benz', 'speed': 160},
            {'brand': 'QQ', 'speed': 100}
        ],
        'num': [[123, 321], [456, 654], [789, 987]]
    }
    try:
        with open('data.json', 'w', encoding='utf-8') as fs:
            json.dump(mydict, fs)  # 上传数据
    except IOError as e:
        print(e)
    print('加载完成')


if __name__ == '__main__':
    main()

Json中有4个比较重要的模块:

dump - 将Python对象按照JSON格式序列化到文件中
dumps - 将Python对象处理成JSON格式的字符串
load - 将文件中的JSON数据反序列化成对象
loads - 将字符串的内容反序列化成Python对象
import requests
import json


def main():
    resp = requests.get('http://api.tianapi.com/meinv/?key=Key&num=10')  # 得到url
    mydict = json.loads(resp.text)  # 将设置需要得到的文件格式
    for tempdict in mydict['newslist']:  # 利用循环取出字典中的每一个值
        pic_url = tempdict['picUrl']  # 得到列表中的某一个字段
        resp = requests.get(pic_url)  # 请求得到该数据
        filename = pic_url[pic_url.rfind('/') + 1:]  # 得到需要的文件名
        try:
            with open(filename, 'wb') as fs:
                fs.write(resp.content)  # 保存数据  可以是文本也可以是二进制的数据
                print("下载完成")
        except IOError as e:
            print(e)


if __name__ == '__main__':
    main()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值