• Python操作JSON和CSV


    JSON

    JSON(JavaScript Object Notation, JS 对象标记)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
    它基于ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。

    JSON支持数据格式:

    • 对象(字典)。使用花括号。
    • 数组(列表)。使用方括号。
    • 整形、浮点型、布尔类型还有null类型。
    • 字符串类型(字符串必须要用双引号,不能用单引号)。

    多个数据之间使用逗号分开。注:json本质上就是一个字符串。

    JSON函数

    使用JSON函数需要导入json库:import json

    函数 描述
    json.dumps 将Python对象编码成JSON字符串
    json.loads 将已编码的JSON字符串解码为Python对象

    另外:
    json.dump()json.load()主要用来读写json文件函数。

    字典和列表转JSON

    import json
    
    books = [
        {
            'title': 'Python基础',
            'price': '79.00'
        },
        {
            'title': 'Scrapy网络爬虫',
            'price': '56.00'
        }
    ]
    
    json_str = json.dumps(books)
    print('type: ', type(json_str))
    print('json_str: ', json_str)
    # 输出:
    type:  <class 'str'>
    json_str:  [{"title": "Pythonu57fau7840", "price": "79.00"}, {"title": "Scrapyu7f51u7edcu722cu866b", "price": "56.00"}]
    

    注:因为json在dump的时候,只能存放ASCII的字符,因此会将中文进行转义,这时候我们可以使用ensure_ascii=False关闭这个特性。

    更改之后:

    json_str = json.dumps(books, ensure_ascii=False)
    # 输出:
    [{"title": "Python基础", "price": "79.00"}, {"title": "Scrapy网络爬虫", "price": "56.00"}]
    

    注:Python中,只有基本数据类型才能转换成JSON格式的字符串,即:intfloatstrlistdicttuple

    将json数据直接dump到文件中

    常规方式:

    import json
    
    books = [
        {
            'title': 'Python基础',
            'price': '79.00'
        },
        {
            'title': 'Scrapy网络爬虫',
            'price': '56.00'
        }
    ]
    
    json_str = json.dumps(books, ensure_ascii=False)
    
    with open('books.json', 'w') as fp:
        fp.write(json_str)
    

    打开books.json文件发现出现了乱码:

    [{"title": "Python����", "price": "79.00"}, {"title": "Scrapy��������", "price": "56.00"}]
    

    然后指定文件编码方式:

    with open('books.json', 'w', encoding='utf8') as fp:
        fp.write(json_str)
    

    重新打开books.json文件发现一切正常:

    [{"title": "Python基础", "price": "79.00"}, {"title": "Scrapy网络爬虫", "price": "56.00"}]
    

    json模块中除了dumps函数,还有一个dump函数,这个函数可以传入一个文件指针,直接将字符串dump到文件中。

    import json
    
    books = [
        {
            'title': 'Python基础',
            'price': '79.00'
        },
        {
            'title': 'Scrapy网络爬虫',
            'price': '56.00'
        }
    ]
    
    
    with open('books.json', 'w', encoding='utf8') as fp:
        json.dump(books, fp)
    # 输出:
    [{"title": "Pythonu57fau7840", "price": "79.00"}, {"title": "Scrapyu7f51u7edcu722cu866b", "price": "56.00"}]
    

    关闭中文转义:

    with open('books.json', 'w', encoding='utf8') as fp:
        json.dump(books, fp, ensure_ascii=False)
    # 输出:
    [{"title": "Python基础", "price": "79.00"}, {"title": "Scrapy网络爬虫", "price": "56.00"}]
    

    将一个json字符串load成Python对象

    import json
    
    json_str = '[{"title": "Python基础", "price": "79.00"}, {"title": "Scrapy网络爬虫", "price": "56.00"}]'
    books = json.loads(json_str)
    
    print('type: ', type(books))
    print('boos: ', books)
    # 输出:
    type:  <class 'list'>
    boos:  [{'title': 'Python基础', 'price': '79.00'}, {'title': 'Scrapy网络爬虫', 'price': '56.00'}]
    

    直接从文件中读取json:

    import json
    
    # 注意指定文件编码方式
    with open('books.json', 'r', encoding='utf8') as fp:
        json_str = json.load(fp)
        print(json_str)
    
    # 输出:
    [{'title': 'Python基础', 'price': '79.00'}, {'title': 'Scrapy网络爬虫', 'price': '56.00'}]
    

    csv文件处理

    读取csv文件

    import csv
    
    with open('stock.csv','r') as fp:
        reader = csv.reader(fp)
        titles = next(reader)
        for x in reader:
            print(x)
    

    这样操作,以后获取数据的时候,就要通过下表来获取数据。如果想要在获取数据的时候通过标题来获取。那么可以使用DictReader:

    import csv
    
    with open('stock.csv','r') as fp:
        reader = csv.DictReader(fp)
        for x in reader:
            print(x['turnoverVol'])
    

    写入数据到csv文件

    写入数据到csv文件,需要创建一个writer对象,主要用到两个方法。一个是writerow,这个是写入一行。一个是writerows,这个是写入多行:

    import csv
    
    headers = ['name','age','classroom']
    values = [
        ('zhiliao',18,'111'),
        ('wena',20,'222'),
        ('bbc',21,'111')
    ]
    with open('test.csv','w',newline='') as fp:
        writer = csv.writer(fp)
        writer.writerow(headers)
        writer.writerows(values)
    

    也可以使用字典的方式把数据写入进去。这时候就需要使用DictWriter了:

    import csv
    
    headers = ['name','age','classroom']
    values = [
        {"name":'wenn',"age":20,"classroom":'222'},
        {"name":'abc',"age":30,"classroom":'333'}
    ]
    with open('test.csv','w',newline='') as fp:
        writer = csv.DictWriter(fp,headers)
        writer = csv.writeheader()
        writer.writerow({'name':'zhiliao',"age":18,"classroom":'111'})
        writer.writerows(values)
    

    参考:
    Python JSON: http://www.runoob.com/python/python-json.html
    python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分: https://www.cnblogs.com/xiaomingzaixian/p/7286793.html

  • 相关阅读:
    php一些实用的自制方法
    php商城数据库的设计 之无限分类
    thinkphp的where 之 or的使用
    thinkphp 接收文件并处理
    thinkphp验证器
    Html中文字过多,单行超出和多行超出显示省略号
    THINKPHP 模板上传图片--后台接收图片
    UIStackView,真正的自动布局
    iOS 为什么有的APP,没有在Devices显示出来?
    访问iOS APP的8080端口服务
  • 原文地址:https://www.cnblogs.com/onefine/p/10499337.html
Copyright © 2020-2023  润新知