专栏首页日常杂谈3-数据存储之文件存储(1)

3-数据存储之文件存储(1)

一 简单介绍:

我们前面很少将提取的数据或者获取的源码保存下来;其实日常的工作中在解析出数据后接下来就是存储数据。

保存数据的形式有多种多样txt\json\csv\mysql\mobgodb\redis,接下来我们一一介绍。

1). txt文本存储:

python txt文件操作中离不开open()函数,它可以创建或者打开指定的文件,并创建一个文件对象 ,基本的语法:

open() 函数用于创建或打开指定文件,该函数的语法格式如下:
file = open(file_name,"文件打开方式")

文件打开的方式有以下几种:

模式

意义

注意事项

r

只读模式打开文件,读文件内容的指针会放在文件的开头。

操作的文件必须存在。

rb

以二进制格式、采用只读模式打开文件,读文件内容的指针位于文件的开头,一般用于非文本文件,如图片文件、音频文件等。

r+

打开文件后,既可以从头读取文件内容,也可以从开头向文件中写入新的内容,写入的新内容会覆盖文件中等长度的原有内容。

rb+

以二进制格式、采用读写模式打开文件,读写文件的指针会放在文件的开头,通常针对非文本文件(如音频文件)。

w

以只写模式打开文件,若该文件存在,打开时会清空文件中原有的内容。

若文件存在,会清空其原有内容(覆盖文件);反之,则创建新文件。

wb

以二进制格式、只写模式打开文件,一般用于非文本文件(如音频文件)

w+

打开文件后,会对原有内容进行清空,并对该文件有读写权限。

wb+

以二进制格式、读写模式打开文件,一般用于非文本文件

a

以追加模式打开一个文件,对文件只有写入权限,如果文件已经存在,文件指针将放在文件的末尾(即新写入内容会位于已有内容之后);反之,则会创建新文件。

ab

以二进制格式打开文件,并采用追加模式,对文件只有写权限。如果该文件已存在,文件指针位于文件末尾(新写入文件会位于已有内容之后);反之,则创建新文件。

a+

以读写模式打开文件;如果文件存在,文件指针放在文件的末尾(新写入文件会位于已有内容之后);反之,则创建新文件。

ab+

以二进制模式打开文件,并采用追加模式,对文件具有读写权限,如果文件存在,则文件指针位于文件的末尾(新写入文件会位于已有内容之后);反之,则创建新文件。

熟悉/了解上面的知识点后(详细信息:菜鸟教程/w3school),我们实例一下;

小说网站:https://xs.sogou.com/mianfei/ 获取书名、简洁并保存为txt文件:

import requests
import json
#设置ua
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36",
}
#获取网页源代码
r = requests.get("https://xs.sogou.com/api/pc/v1/activity/freeread/current?pageNo=1&pageSize=12",headers=headers).text
#json格式一下
html = json.loads(r)
#接下来就是获取数据
name = html["data"]["pageList"]
for i in name:
    bookName = i["bookName"]
    content = i["description"]
    #写入数据
    with open("小说.txt","a",encoding="utf-8") as f:
        f.write(bookName)
        f.write(content)
        f.write("\n"+ "==" * 20 + "\n")
        print("已写入......")
以with as的方式实现数据存储好处:不需要调用close()方法
以上写入还可以使用:
    file = open("小说.txt","a",encoding="utf-8")
    file.write(bookName)
    file.write(content)
	file.write("\n"+ "==" * 20 + "\n")
    print("已写入......")
最后结果都是一样的

注:有细心的同学发现我用的url跟网站的url是不一样的,这个是怎么回事??

原来使用requests请求的出来的数据没有小说的信息(数据),抓包发现该网站是通过Ajax技术实现数据的请求,所以我找到 了该网站的API,如图所示:

这样我们直接请求这个网址后得到的就是一个json的数据文件,之后我们解析一下就可以了。

2). JSON文件存储:

先官方话了解一下: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。

这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

你读一遍的话会懵逼的,不要慌,你暂时不要管,学习它常用的:

json: 用于字符串和python数据类型间进行转换 ,它提供四个功能 dumps、dump、loads、load ,用的比较多的是(loads,dumps)下面我们学习下。

loads():将JSON文本字符串转换成JSON对象;

dumps():将JSON对象转换成JSON文本字符串;

#在我们上面的小说例子中,我们使用的就是loads()
import json

test_dict = {'bigberg': [7600, {1: [['iPhone', 6300], ['Bike', 800], ['shirt', 300]]}]}
print(test_dict)
print(type(test_dict))
#dumps 将数据转换成字符串
json_str = json.dumps(test_dict)
print(json_str)
print(type(json_str))
#loads: 将字符串转换为字典
new_dict = json.loads(json_str)
print(new_dict)
print(type(new_dict))

dump: 将数据写入json文件中 ; load:把文件打开,并把字符串变换为数据类型 ;有兴趣的同学可以学习一下用法。

3). CSV文件存储:

使用csv文件存储,我理解的就是表格存储,Excel都用过吧,就是那个;接下来我们分文件的写入跟读取两部分分开讲解,请系好安全带(如果非要介绍定义的话,请百度…我就是懒);

简单写入,首先打开一个csv文件,指定打开的模式然后使用write()方法初始化写入对象,最后调用writerow()方法传入每行的数据即可,代码如下:

import csv
#如果不加newline参数的话,会自动这只每行换行,如下图所示
#加上以后就不会出现下图的问题,小技巧,你值得拥有
with open("name.csv","w",newline="") as f:
    writer = csv.writer(f)
    #传入的是一个列表
    writer.writerow(["num","name","age","sex"])
    writer.writerow(["100","你",12,"男"])
    writer.writerow(["101","好",13,"女"])

效果图如下:

可以看到还有排版的问题,更多的功能等你发掘;

简单读取:我们需要构造reader对象,通过遍历的方式输出每行的信息;代码及效果图如下:

import csv 

with open("name.csv",'r') as f:
    reader = csv.reader(f)
    for i in reader:
        print(i)

#接触到pandas的话你会了解到read_csv()方法:
import pandas as pd
df = read_csv("name.csv")
print(df)
这个要比第一个方式舒服很多。。。。。

未完待续…

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 1-xpath敲黑板

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    xbhog
  • (csdn)阅读数小程序v1.0

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    xbhog
  • jupyter远程安装文档

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    xbhog
  • 昨晚上群友问我,你知道啥是文件吗?于是就有了今天的文章

    所有的应用程序都需要存储和检索信息。当进程运行时,它能够在自己的存储空间内存储一定量的信息。然而,存储容量受虚拟地址空间大小的限制。对于一些应用程序来说,存储空...

    乔戈里
  • 函数 | Python内置函数详解—IO操作类

    Python内置的函数及其用法。为了方便记忆,已经有很多开发者将这些内置函数进行了如下分类:

    潘永斌
  • Python 文件操作

    一份执着✘
  • java开发知识IO知识之输入输出流以及文件

    简单来说. 就是操作二进制. 二进制提供了读写功能. 写就是输出. 读就是输入. 输入输出流图示:

    IBinary
  • 收集3:所有文件格式

    A 对象代码库文件 AAM Authorware shocked文件 AAS Authorware shocked包 ABF Adobe二进制屏幕字体 ...

    用户2398817
  • Python 之文件读写操作

            使用 open 打开文件后,格式:open(filename,mode),最后一定要调用文件对象的 close() 方法,如图所示:

    用户2398817
  • [每天五分钟,备战架构师-5]操作系统之文件管理

    操作系统实现了对系统硬件资源和软件资源的管理,其中软件资源主要是各种系统程序、用户应用程序,还包括大量的文档材料,这些软件资源在操作系统中大多以文件的形式存储。...

    大江小浪

扫码关注云+社区

领取腾讯云代金券