【BOOK】数据存储—文件存储(TXT、JSON、CSV)

数据存储

文本文件—TXT、JSON、CSV

关系型数据库—MySQL、SQLite、Oracle、SQL Server、DB2

非关系型数据库—MongoDB、Redis

 

文件打开 open(),第二个参数设置文件打开方式

※      r:只读,文件指针在文件开头

※      rb:二进制只读,文件指针在文件开头

※      r+:读写方式,文件指针在文件开头

※      w:写入,如果文件已存在,则覆盖;若文件不存在,则新建

※      wb:二进制写入,如果文件已存在,则覆盖;若文件不存在,则新建

※      w+:读写,如果文件已存在,则覆盖;若文件不存在,则新建

※      a:追加方式,如果文件已存在,将内容新增再最后;若文件不存在,则新建写入

※      ab:二进制追加方式,如果文件已存在,将内容新增再最后;若文件不存在,则新建写入

※      a+:读写追加,如果文件已存在,将内容新增再最后;若文件不存在,则新建写入

一、TXT文本存储

实例:爬取知乎--热门专题页面

## 爬取知乎热门专题
import requests
from pyquery import PyQuery as pq

url = ‘https://www.zhihu.com/special/all‘

try:
    headers = {
        ‘cookie‘: ‘miid=421313831459957575; _samesite_flag_=true; cookie2=1cd225d128b8f915414ca1d56e99dd42; t=5b4306b92a563cc96ffb9e39037350b4; _tb_token_=587ae39b3e1b8; cna=DmpEFqOo1zMCAdpqkRZ0xo79; unb=643110845; uc3=nk2=30mP%2BxQ%3D&id2=VWsrWqauorhP&lg2=U%2BGCWk%2F75gdr5Q%3D%3D&vt3=F8dBxdz4jRii0h%2Bs3pw%3D; csg=f54462ca; lgc=%5Cu5939zhi; cookie17=VWsrWqauorhP; dnk=%5Cu5939zhi; skt=906cb7efa634723b; existShop=MTU4MjI5Mjk4NQ%3D%3D; uc4=id4=0%40V8o%2FAfalcPHRLJCDGtb%2Fdp1gVzM%3D&nk4=0%403b07vSmMRqc2uEhDugyrBg%3D%3D; publishItemObj=Ng%3D%3D; tracknick=%5Cu5939zhi; _cc_=UIHiLt3xSw%3D%3D; tg=0; _l_g_=Ug%3D%3D; sg=i54; _nk_=%5Cu5939zhi; cookie1=AnPBkeBRJ7RXH1lHWy9jEkFiHPof0dsM6sKE2hraCKY%3D; enc=gTfBHQmDAXUW0nTwDZWT%2BXlVfPmDqVQdFSKTby%2BoWsATGTG4yqih%2FJwqG7BvGfl1N%2Bc1FeptT%2BWNjgCnd3%2FX9Q%3D%3D; __guid=154677242.2334981537288746500.1582292984682.7253; mt=ci=25_1; v=0; thw=cn; hng=CN%7Czh-CN%7CCNY%7C156; JSESSIONID=6A1CD727C830F88997EE7A11C795F670; uc1=cookie14=UoTUOLFGTPNtWQ%3D%3D&lng=zh_CN&cookie16=URm48syIJ1yk0MX2J7mAAEhTuw%3D%3D&existShop=false&cookie21=URm48syIYn73&tag=8&cookie15=URm48syIIVrSKA%3D%3D&pas=0; monitor_count=4; isg=BGRk121i5pgW-RJU8ZZzF7W5NWJW_Yhn96AFLn6F6C_yKQXzpgzI9-XL6IExt8C_; l=cBjv7QE7QsWpTNssBOCiNQhfh1_t7IRf6uSJcRmMi_5p21T_QV7OoWj0Ve96DjWhTFLB4IFj7TyTxeW_JsuKHdGJ4AadZ‘,
        ‘user-agent‘: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
    }
    html = requests.get(url, headers=headers, timeout=30).text
except:
    print(‘爬取失败!‘)

doc = pq(html)
## pyquery进行页面解析,class属性用 . 匹配
## 调用items()得到一个生成器,for in 进行遍历
items = doc(‘.SpecialListCard.SpecialListPage-specialCard‘).items()
for item in items:
    title = item.find(‘.SpecialListCard-title‘).text()
    intro = item.find(‘.SpecialListCard-intro‘).text()
    with open(‘special.txt‘, ‘a‘, encoding=‘utf-8‘) as file:
        file.write(‘\n‘.join([title,intro]) + ‘\n‘)
        sections = item.find(‘.SpecialListCard-sections‘).items()
        for section in sections:
            special = section.find(‘a‘).text()
            file.write(‘\n‘.join([special]))
        file.write(‘\n‘ + ‘=‘*50 + ‘\n‘)
    file.close()

运行结果:

 

二、JSON文件存储

JavaScript Object Notation—JavaScript对象标记

1、用对象和数组表示数据,结构化程度高

     ※对象—键值对 {key : value}

     ※数组—[‘a’, ‘b’, ’c’]

     —> [{key 1: value1}, {key2 : value2}]

2、JSON库实现JSON文件的读写操作

       ※读取JSON

       loads() 将字符串类型转换成JSON对象 
import json

## JSON对象中的数据需要双引号 "" 包围
str = ‘‘‘
[{"name":"呱呱", "gender":"男", "age":"5"},
{"name":"嘎嘎", "gender":"女", "age":"22"}
]
‘‘‘
## loads() 将字符串类型转换成JSON对象
data = json.loads(str)
print(type(data))  ## <class ‘list‘>,字符串类型转换成列表类型
print(data[0][‘name‘])
print(data[0].get(‘name‘))
## 读取JSON文件
import json

with open(‘data.json‘, ‘r‘) as file:
    str = file.read()
    data = json.loads(str)
    print(data)  

       ※输出JSON

       dumps() 将JSON对象换成字符串
import json

## JSON对象中的数据需要双引号 "" 包围
data = [{"name":"呱呱", "gender":"男", "age":"5"},
{"name":"嘎嘎", "gender":"女", "age":"22"}
]

## dumps() 将JSON对象换成字符串
with open(‘data.json‘, ‘w‘, encoding=‘utf-8‘) as file:
    ## indent=2 保存的JSON对象自带缩进
    ## ensure_ascii=False,JSON文件中包含中文
    file.write(json.dumps(data, indent=2, ensure_ascii=False))

  

三、CSV文件存储【!!可以用excel打开!!】

Comma-Separated Values—逗号分隔值/字符分隔值

纯文本形式存储表格数据

1、 写入

import csv

## newline=‘‘ ,保证每行之间没有空格
with open(‘data.csv‘, ‘w‘, newline=‘‘) as csvfile:
    writer = csv.writer(csvfile)
    ## writerow() 每行写入
    writer.writerow([‘id‘, ‘name‘, ‘age‘])
    writer.writerow([‘1001‘, ‘呱呱‘, ‘20‘])
    writer.writerow([‘1002‘, ‘啦啦‘, ‘36‘])
    writer.writerow([‘1003‘, ‘哈哈‘, ‘14‘])
    ## writerows() 写入多行,效果同上
    writer.writerows([[‘1004‘, ‘卡卡‘, ‘6‘],[‘1005‘, ‘哇哇‘, ‘65‘]])
import csv

## 字典写入
with open(‘data1.csv‘, ‘w‘, newline=‘‘) as csvfile:
    fieldnames = [‘id‘, ‘name‘, ‘age‘] ## 给csv表的表头赋值
    ## DictWriter初始化一个字典写入对象
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({‘id‘:‘1001‘, ‘name‘:‘呱呱‘, ‘age‘:20})
    writer.writerow({‘id‘: ‘1002‘, ‘name‘: ‘啦啦‘, ‘age‘: 36})
    writer.writerow({‘id‘: ‘1003‘, ‘name‘: ‘哈哈‘, ‘age‘: 14})
## 追加数据
with open(‘data1.csv‘, ‘a‘, newline=‘‘) as csvfile:
    fieldnames = [‘id‘, ‘name‘, ‘age‘]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writerow({‘id‘:‘1004‘, ‘name‘:‘八八‘, ‘age‘:20})

  

2、 读取

import csv

with open(‘data.csv‘, ‘r‘) as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)

【实例】知乎--热门专题--存储到excel

## 爬取知乎热门专题
import requests
from pyquery import PyQuery as pq
import csv

url = ‘https://www.zhihu.com/special/all‘

try:
    headers = {
        ‘cookie‘: ‘miid=421313831459957575; _samesite_flag_=true; cookie2=1cd225d128b8f915414ca1d56e99dd42; t=5b4306b92a563cc96ffb9e39037350b4; _tb_token_=587ae39b3e1b8; cna=DmpEFqOo1zMCAdpqkRZ0xo79; unb=643110845; uc3=nk2=30mP%2BxQ%3D&id2=VWsrWqauorhP&lg2=U%2BGCWk%2F75gdr5Q%3D%3D&vt3=F8dBxdz4jRii0h%2Bs3pw%3D; csg=f54462ca; lgc=%5Cu5939zhi; cookie17=VWsrWqauorhP; dnk=%5Cu5939zhi; skt=906cb7efa634723b; existShop=MTU4MjI5Mjk4NQ%3D%3D; uc4=id4=0%40V8o%2FAfalcPHRLJCDGtb%2Fdp1gVzM%3D&nk4=0%403b07vSmMRqc2uEhDugyrBg%3D%3D; publishItemObj=Ng%3D%3D; tracknick=%5Cu5939zhi; _cc_=UIHiLt3xSw%3D%3D; tg=0; _l_g_=Ug%3D%3D; sg=i54; _nk_=%5Cu5939zhi; cookie1=AnPBkeBRJ7RXH1lHWy9jEkFiHPof0dsM6sKE2hraCKY%3D; enc=gTfBHQmDAXUW0nTwDZWT%2BXlVfPmDqVQdFSKTby%2BoWsATGTG4yqih%2FJwqG7BvGfl1N%2Bc1FeptT%2BWNjgCnd3%2FX9Q%3D%3D; __guid=154677242.2334981537288746500.1582292984682.7253; mt=ci=25_1; v=0; thw=cn; hng=CN%7Czh-CN%7CCNY%7C156; JSESSIONID=6A1CD727C830F88997EE7A11C795F670; uc1=cookie14=UoTUOLFGTPNtWQ%3D%3D&lng=zh_CN&cookie16=URm48syIJ1yk0MX2J7mAAEhTuw%3D%3D&existShop=false&cookie21=URm48syIYn73&tag=8&cookie15=URm48syIIVrSKA%3D%3D&pas=0; monitor_count=4; isg=BGRk121i5pgW-RJU8ZZzF7W5NWJW_Yhn96AFLn6F6C_yKQXzpgzI9-XL6IExt8C_; l=cBjv7QE7QsWpTNssBOCiNQhfh1_t7IRf6uSJcRmMi_5p21T_QV7OoWj0Ve96DjWhTFLB4IFj7TyTxeW_JsuKHdGJ4AadZ‘,
        ‘user-agent‘: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
    }
    html = requests.get(url, headers=headers, timeout=30).text
except:
    print(‘爬取失败!‘)

doc = pq(html)
## pyquery进行页面解析,class属性用 . 匹配
## 调用items()得到一个生成器,for in 进行遍历

with open(‘data1.csv‘, ‘a‘, newline=‘‘) as csvfile:
    header = [‘专题标题‘, ‘说明‘, ‘子专题‘]
    writer = csv.DictWriter(csvfile, fieldnames=header)
    writer.writeheader()
    items = doc(‘.SpecialListCard.SpecialListPage-specialCard‘).items()
    for item in items:
        title = item.find(‘.SpecialListCard-title‘).text()
        intro = item.find(‘.SpecialListCard-intro‘).text()
        sections = item.find(‘.SpecialListCard-sections‘).items()
        for section in sections:
            special = section.find(‘a‘).text()
            writer.writerow({‘专题标题‘: title, ‘说明‘: intro, ‘子专题‘: special})
csvfile.close()

运行结果:

  

  

 

原文地址:https://www.cnblogs.com/motoharu/p/12577132.html

时间: 2024-10-07 13:31:35

【BOOK】数据存储—文件存储(TXT、JSON、CSV)的相关文章

Class 15 - 1 数据存储——文件存储

保存的形式可以多种多样,最简单的形式是 接保存为文本文件,如 TXT.JSON.CSV等.还可以保存到数据库中,如关系型数据库 MySQL ,非关系型数据库 MongoDB.Redis等. 一.TXT文本存储  基本实例: 可以用 requests 将网页源代码获取下来,然后使用 pyquery 解析库解析,接下来将提取的标题. 回答者. 回答保存到文本,代码: import requests from pyquery import PyQuery as pq url = 'https://ww

IOS开发--数据持久化篇之文件存储(一)

前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不胜感激. 什么叫数据持久化: 在这里我就不照搬教科书上抽象的概念了.我觉得既然要把东西写出来就让它简单明了. 要搞清楚数据持久化,首先要知道数据持久化是相对于缓存而言的,缓存是在程序运行的过程中保存在内存中,程序一旦运行结束,其内存就会被释放.缓存在内存中的数据也就随之消失. 那么数据持久化就是要解

[安卓基础] 012.存储数据(下)——文件存储

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin

Android数据保存的3种方式 SharedPreferences存储、文件存储、数据库存储SQLite 未完

1.文件存储 文件存储数据使用了Java中的IO操作来进行文件的保存和读取,只不过Android在Context类中封装好了输入流和输出流的获取方法. 创建的存储文件保存在/data/data/<package name>/files文件夹下.

4、Android-数据存储方案(文件存储/SharedPreferences)

简介: 任何一个应用程序都需要和数据进行交互 对于软件来说微博.QQ等都需要关系的是数据 没有数据的应用程序是一个没有灵魂的软件 而且还没有实际的用途 可以认为是单机 4.1.持久化技术的简介 数据持久化是指将那些内存中的瞬时数据保存到存储设备中 保证手机或者电脑关机的情况下,这些数据不会丢失 保存在内存中的数据是处于瞬时状态的 保证再存储设备中的是处于持久状态的 持久化技术则提供了一种机制可以让数据再瞬时状态和持久化状态之间进行转换 持久化技术被广泛应用于各种程序设计的领域当中 Android

Python-爬虫-(Json和Csv)文件存储

用解析器解析出的数据后,可以通过TXT.JSON.CSV等文件形式进行存储: 1.TXT形式此处略: 2.JSON文件存储 json即js 对象标记,是一种数据格式: json格式: json对象:{"username":"ADMIN","pwd":"xxxx","address":"北京"} json数组:[{"name":"smith",&qu

数据存储之文件存储

文件存储 TXT文件存储 # 爬取知乎上的热门话题,获取话题的问题.作者.答案,然后保存在TXT文本中 1 import requests 2 from pyquery import PyQuery 3 4 url = 'https://www.zhihu.com/explore' 5 headers = { 6 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, li

iOS开发——数据持久化Swift篇&amp;通用文件存储

通用文件存储 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 @IBOutlet weak var textField: UITextField! 6 7 @IBAction func btnSave(sender: UIButton) { 8 var text = textField.text as NSString 9 10 //写入文件(可序列化) 11 text.writeToFile(getPath("da

Android数据存储之文件存储

首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. public void save()    {        try {            FileOutputStream outStream=this.openFileOutput("a.txt",Context.MODE_WORLD_READABLE);            outStre