• 爬虫(八):文件处理


    1. json文件处理

    1.1 什么是json

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

    1.2 json支持数据格式

    1.对象(字典)。使用花括号。

    2.数组(列表)。使用方括号。

    3.整型、浮点型、布尔类型和null类型。

    4.字符串类型(字符串必须要用双引号,不能用单引号)。

    多个数据之间使用逗号分开。

    注意:json本质上就是一个字符串。

    1.3 字典和列表转json

    import json
    
    books = [
        {
            "title":"坏蛋是怎样炼成的1","price":9.8
        },
        {
            "title":"坏蛋是怎样炼成的2","price":9.9
        }
     ]
    
    json_str = json.dumps(books,ensure_ascii=False)
    print(json_str)
    print(type(books))
    print(type(json_str))

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

    在python中,只有基本数据类型才能转换成json格式的字符串。即:int、float、str、list、dict、tuple。

    将json数据直接dump到文件中:

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

    import json
    
    books = [
        {
            "title":"坏蛋是怎样炼成的1","price":9.8
        },
        {
            "title":"坏蛋是怎样炼成的2","price":9.9
        }
     ]
    
    with open('a.json','w',encoding='utf-8') as fp:
        json.dump(books,fp,ensure_ascii=False)

    dump和dumps的区别:

    dump()不需要使用write()方法,只需要写哪个字典、哪个文件即可;而.dumps()需要使用write()方法写入

    如果要把字典写到文件里面的时候,dump()好用;但如果不需要操作文件,或需要把内容存到数据库和Excel,则需要使用dumps()先把字典转成字符串,再写入。

    1.4 将一个json字符串load成python对象

    #encoding: utf-8
    import json
    
    json_str = '[{"title": "坏蛋是怎样炼成的1", "price": 9.8}, {"title": "坏蛋是怎样炼成的2", "price": 9.9}]'
    
    books = json.loads(json_str)
    print(type(books))
    for book in books:
        print(book)

    直接从文件中读取json:

    #encoding: utf-8
    import json
    
    with open('a.json','r',encoding='utf-8') as fp:
       books = json.load(fp)
       for book in books:
           print(book)

    load与loads的区别:

    loads()传的是字符串,而load()传的是文件对象

    使用loads()时需要先读文件再使用,而load()则不用

    2. CSV文件处理

    CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。

    2.1 读取csv文件

    csv数据:

    csv文件不能直接创建,只能由excel文件另存为csv格式。

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

    为什么读取不到第一行呢?

    因为第一行一般都是存放标题等信息。 

    这样操作,以后获取数据的时候,就要通过上面的方法来获取数据。 如果想要在获取数据的时候通过标题来获取,那么可以用DictReader。

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

    我们可以通过标题来选中返回的数据:

    import csv
    
    with open('Demo.csv','r') as fp:
        reader = csv.DictReader(fp)
        for x in reader:
            print(x['数据1'])

    2.2 写入数据到csv文件

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

    import csv
    
    headers = {'name','age','height'}
    values = {
        ('张三',18,170),
        ('李四',20,175),
        ('王五',21,180)
    }
    with open('test.csv','w',encoding='utf-8') as fp:
        writer = csv.writer(fp)
        writer.writerow(headers)
        writer.writerows(values)

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

    import csv
    
    headers = ['name','age','height']
    values = [
        {'name':'张三','age':18,'height':170},
        {'name':'李四','age':20,'height':175},
        {'name':'王五','age':21,'height':180}
    ]
    with open('test.csv','w',encoding='utf-8') as fp:
        writer = csv.DictWriter(fp,headers)
        writer.writeheader()
        writer.writerows(values)

  • 相关阅读:
    POJ1785 Binary Search Heap Construction
    Bzoj1185 [HNOI2007]最小矩形覆盖
    POJ2409 Let it Bead
    Bzoj2732 [HNOI2012]射箭
    Bzoj4515 [Sdoi2016]游戏
    Bzoj3925 [Zjoi2015]地震后的幻想乡
    Bzoj3223 Tyvj 1729 文艺平衡树
    COGS2642 / Bzoj4590 [Shoi2015]自动刷题机
    Bzoj1313 [HAOI2008]下落的圆盘
    python——描述符
  • 原文地址:https://www.cnblogs.com/liuhui0308/p/12054503.html
Copyright © 2020-2023  润新知