网页数据的存储--存储为文本文件(TXT、JSON、CSV)

news2024/11/17 23:34:39

        用解析器解析出数据后,接下来就是存储数据了。数据的存储有多种多样,其中最简单的一种是将数据直接保存为文本文件,如TXT、JSON、CSV等。这里就介绍将数据直接保存为文本文件。

目录

一、Python存储数据的方法

1、 文件读取

2、 文件写入

3、文件复制

 4、文件读写模式

二、TXT文本文件存储

三、JSON文件存储

1、对象和数组

2、读取JSON

3、输出JSON

 四、CSV文件存储

1、写入

2、读取


一、Python存储数据的方法

        在Python中有一个内置的方法--open方法可以将数据进行存储、读写,使用open方法操作文件就像把大象塞进冰箱一样, 可以分三步走,一是打开文件,二是操作文件,三是关闭文件。 

1、 文件读取

  • f=open(测试1.txt,mode='r,encoding=utf-8’)     读取指定位置的文件,文件编码为utf-8
  • f.read()             读取文件的所有内容
  • f.readline()       读取文件的一行数据
  • f.readlines()     从文件中一次读取所有行到一个列表中

 示例如下:

# 打开文件,指定文件位置,进行读取操作,采用utf-8编码
# f = open(r'D:\Python Files\Spider\文件操作\abc.txt', mode='r', encoding='utf-8')
# 读取文件所有数据
txt = f.read()
# 读取文件的一行数据
txt = f.readline()
print(txt, end='')
# 通过循环的方式,读取文件的每一行数据可以读取完文件的所有数据等于read方法
while txt:

    txt = f.readline()
    print(txt, end='')
# 从一个文件中一次读取所有行到一个列表中。
txt = f.readlines()
print(txt)
# 关闭文件
f.close()
print(f.closed)

        但是由于每次采用open方法需要手动的写close方法来关闭文件,如果不关闭文件容易出现文件数据丢失等问题。所以,python中有一个with方法,对文件操作完成后,会自动关闭文件。示例如下:

#输入文件路径,操作方法和编码方式,将其句柄赋给f,通过f来对文件进行操作,操作完后会自动关闭文件 
with open('abc.txt', 'r', encoding='utf-8') as f:
    txt = f.read()
print(f.closed)

2、 文件写入

  • f=open(‘测试1.txt',mode=w',encoding='utf-8')    指定文件的存储位置,文件编码为utf-8
  • f.write(‘字符串’)      给文件写入字符串数据
  • f.writelines(‘列表’)    给文件写入列表数据

示例如下: 

s = '今天天气真好!'
l = ['a', 'b', 'c']
with open('测试2.txt', 'w', encoding='utf-8') as f:
    f.write(s)
    f.writelines(l)

3、文件复制

        现在,我们已经了解了文件的读取与写入,结合这两种办法可以进行文件复制。首先我们指定文件读取的位置和写入文件的存储位置,然后将读取的文件的数据写入指定存储文件的位置。这样,就实现了文件的复制。

示例代码如下:

复制文件
f1 = open('abc.txt', 'r', encoding='utf-8')
f2 = open('abc1.txt', 'w', encoding='utf-8')
f2.writelines(f1.readlines())
f1.close()
f2.close()

 4、文件读写模式

        在使用open方法或者with方法的时候,需要传入一个参数来说明对文件的操作模式。存在各种形式的操作模式,每种操作模式的功能不同。下图介绍所有参数的操作模式:

二、TXT文本文件存储

        将数据保存为TXT文件的操作非常简单,而且TXT文本几乎兼容任何平台,但不利于检索。如果对检索和数据结构的要求不高,追求方便的话就可以采用TXT文本存储。在将数据写入的时候,在指定文件的位置的时候,以txt做文件的后缀名,即可将数据以txt的形式存储。示例如下:

s = '今天天气真好!'
l = ['a', 'b', 'c']
with open('测试2.txt', 'w', encoding='utf-8') as f:
    f.write(s)
    f.writelines(l)

        这里将字符串信息和列表信息都以txt形式存储的测试2文件中,指定以utf-8的形式进行编码。

三、JSON文件存储

        JSON,也就是JavaScript对象标记,通过对象和数组的组合来表示数据,构造简洁、结构化程度非常高,是一种轻量级的数据交换格式。 

1、对象和数组

        在JavaScript 语言中,一切皆为对象,因此任何支持的数据类型都可以通过 JSON 表示,例如字符串、数字、对象、数组等。其中对象和数组是比较特殊且常用的两种类型,下面简要介绍一下这两者。

     对象在JavaScript 中是指用花括号{}包围起来的内容,数据结构是 {key1: value1, key2:value2,…}这种键值对结构。在面向对象的语言中,key表示对象的属性、value 表示属性对应的值,前者可以使用整数和字符串表示,后者可以是任意类型。

        数组在 JavaScript 中是指用方括号[]包围起来的内容,数据结构是 ["java","javascript","vb",…]这种索引结构。在JavaScript 中,数组是一种比较特殊的数据类型,因为它也可以像对象那样使用键值对结构,但还是索引结构用得更多。同样,它的值可以是任意类型。所以,一个 JSON 对象可以写为如下形式:

[{
"name": "Bob",
"gender": "male",
"birthday": "1992-10-18"
},{
"name": "Selina",
"gender": "female",
"birthday": "1995-10-18"
}]

        由[ ]包围的内容相当于数组,数组中的每个元素都可以是任意类型,这个实例中的元素是对象,由{} 包围。JSON 可以由以上两种形式自由组合而成,能够嵌套无限次,并且结构清晰,是数据交换的极佳实现方式。

2、读取JSON

        Python为我们提供了简易的JSON库,用来实现JSON文件的读写操作,可以调用loads方法将JSON文本字符串转为JSON对象。实际上,JSON对象就是Python中列表和字典的嵌套与组合。反过来,我们可以通过dumps方法将JSON对象转为文本字符串。 

示例代码如下:

str = '''
[{
"name": "Bob",
"gender": "male",
"birthday": "1992-10-18"
},{
"name": "Selina",
"gender": "female",
"birthday": "1995-10-18"
}]
'''
import json
print(type(str))
data = json.loads(str)
print(data)
print(type(data))

3、输出JSON

        可以调用dumps方法将JSON对象转化为字符串,然后调用文件的write方法将字符串写入文本。 

示例代码如下:

import json
data = [
    {
        'name':'Bob',
        'gender':'male',
        'birthday':'1970-01-01'        
    }
]
with open('data.json', 'w',encoding='utf-8') as f:
    f.write(json.dumps(data))

        如果JSON对象中存在中文, 中文字符会被编码成Unicode字符。想要不将中文自动编码,直接输出中文,只需将参数ensure_ascii设置为False即可。示例代码如下:

import json
data = [
    {
        'name':'Bob',
        'gender':'male',
        'birthday':'1970-01-01'
    }
]
with open('data.json', 'w',encoding='utf-8') as f:
    f.write(json.dumps(data,ensure_ascii=False))

 四、CSV文件存储

        CSV,逗号分割直或字符分割直,以纯文本的形式存储表格数据,相当于一个结构化表的纯文本形式。它不具备Excel中的数值、公式和格式等内容,就是以特定字符作为分隔符纯文本,结构简单清晰。

1、写入

        在将数据写入的时候,在指定文件的位置的时候,以csv做文件的后缀名,即可将数据以csv的形式存储。

示例代码如下:

import  csv
with open('data.csv', 'w') as csvfile:
    wr = csv.writer(csvfile)
    wr.writerow(['id','name','age'])
    wr.writerow(['101','Mike','21'])
    wr.writerow(['102', 'May', '22'])
    wr.writerow(['103', 'Zang', '24'])

结果如下:

id,name,age

101,Mike,21

102,May,22

103,Zang,24

         写入csv文件的文本默认以逗号分隔每条记录,每调用writerow方法是写入一行数据,如果想修改列与列之间的分隔符,可以传入delimiter参数。其代码如下:

import  csv
with open('data.csv', 'w') as csvfile:
    wr = csv.writer(csvfile,delimiter=' ')
    wr.writerow(['id','name','age'])
    wr.writerow(['101','Mike','21'])
    wr.writerow(['102', 'May', '22'])
    wr.writerow(['103', 'Zang', '24'])

结果如下:

id name age

101 Mike 21

102 May 22

103 Zang 24

        还可以使用writerows方法同时写入多行,此时参数需要传入二维列表。示例代码如下:

import  csv
with open('data.csv', 'w') as csvfile:
    wr = csv.writer(csvfile)
    wr.writerow(['id','name','age'])
    wr.writerows([['101','Mike',21],['102', 'May', 22],['103', 'Zang', 24]])

        此外,爬取爬取的数据大都是结构化数据,这里一般用字典来表示。下面就尝试一下用字典来写入,示例代码如下:

import csv

with open('data.csv', 'w') as csvfile:
    fieldnames = ['id', 'name', 'age']
    wr = csv.DictWriter(csvfile, fieldnames=fieldnames)
    wr.writeheader()
    wr.writerow({'id':'101','name':'Mike','age':21})
    wr.writerow({'id': '102', 'name': 'May', 'age': 32})
    wr.writerow({'id': '103', 'name': 'Zang', 'age': 24})

2、读取

        读取的时候,我们需要通过遍历列表的方式来读取CSV的内容。因为reader方法是将CSV中的内容每一行以列表的方式读出,如果有中文需要制定编码方式。示例代码如下:

import csv
with open('data.csv', 'r', encoding='utf-8') as csvfile:
    r = csv.reader(csvfile)
    for row in r:
        print(row)

结果如下:

['id', 'name', 'age']
[]
['101', 'Mike', '21']
[]
['102', 'May', '32']
[]
['103', 'Zang', '24']
[]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1467130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

milvus Delete api写s3的流程

Delete api写s3的流程 milvus版本:v2.3.2 整体架构: Delete 的数据流向 delete相关配置 dataNode:segment:insertBufSize: 16777216 # Max buffer size to flush for a single segment.deleteBufBytes: 67108864 # Max buffer size to flush del for a single channelsyncPe…

Neo4j导入数据之JAVA JDBC

目录结构 前言设置neo4j外部访问代码整理maven 依赖java 代码 参考链接 前言 公司需要获取neo4j数据库内容进行数据筛查,neo4j数据库咱也是头一次基础,辛辛苦苦安装好整理了安装neo4j的步骤,如今又遇到数据不知道怎么创建,关关难…

【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现

1,视频地址 【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现 2,演示效果 启动先是报500 错误&#…

想设计智能手环,我需要设计哪种电路?

随着电子技术的高速发展,可穿戴设备逐渐火爆,其中之一是智能手环,作为现代可穿戴技术的热门产品之一,它集成了多种功能,如健康检测、运动跟踪、通知提醒等,为了实现这些功能,需要用上哪些电路模…

蜂窝物联网咖WiFi认证解决方案

项目背景 随着目前网咖模式越来越流行,给网吧部署一套无缝漫游的WIFI网络势在必行。同时,网吧无线准入的验证码在客户机上面进行更新,以防周边的人员进行蹭网,损失网吧的外网带宽。 01 需求分析 1. 网吧服务区域全部覆盖无盲区…

免费的WP模板网站推荐

免费wordpress模板下载 高端大气上档次的免费wordpress主题,首页大图全屏显示经典风格的wordpress主题。 https://www.wpniu.com/themes/289.html wordpress免费企业主题 深蓝色经典实用的wordpress网站模板,用wordpress免费企业主题搭建网站。 http…

大模型+影像:智能手机“上春山”

这个春节假期,一首《上春山》火了。吃瓜群众热热闹闹学了一个假期的“春山学”,了解了抢占C位的各种技巧。 假期过去,开工大吉,手机行业开始抢占今年的C位。那么问题来了,今年智能手机最大的机会点在哪里?答…

华为---RSTP(一)---RSTP简介

目录 1. STP(Spanning Tree Protocol,生成树协议)的作用 2. STP的缺点 2.1 STP网络拓扑收敛慢 2.2 STP网络链路故障,端口状态切换慢 2.3 终端链路参与STP网络运算,浪费网络资源 2.4 STP网络拓扑变更机制复杂&…

C语言之mkdtemp()特定占位符:XXXXXX 用法实例(八十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

网络原理 HTTP _ HTTPS

回顾 我们前面介绍了HTTP协议的请求和响应的基本结构 请求报文是由首行请求头空行正文来组成的 响应报文是由首行形影头空行响应正文组成的 我们也介绍了一定的请求头之中的键值对的属性 Host,Content-type,Content-length,User-agent,Referer,Cookie HTTP协议中的状态码 我们先…

nginx-------- 高性能的 Web服务端 (三) 验证模块 页面配置

一、http设置 1.1 验证模块 需要输入用户名和密码 htpasswd 此命令来自于 httpd-tools 包,如果没有安装 安装一下即可 也可以安装httpd 直接yum install httpd -y 也一样 第一次生成文件htpasswd -c 文件路径 姓名 交互式生成密码 htpasswd -bc 文…

【Vue3】学习computed计算属性

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

Vision Transfomer系列第二节---Tricks测试

目录 学习式和固定式位置编码测试dropout的作用测试block深度的作用测试embeding维度大小的作用测试多头的作用测试Overlap Patch的作用 学习式和固定式位置编码测试 主要测试无位置编码\可学习位置编码和固定式位置编码的训练效果: 其中固定式位置编码采用之前博客的正余弦位…

动态规划算法学习(基础)

做题步骤: 确定dp数组的含义(一维或者二维) 获取递推公式 dp数组如何初始化 确定遍历顺序 打印dp数组(检查) 题目: 1. 斐波那契数 509 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 …

【C++】类和对象---友元,内部类,匿名对象详解

目录 友元 友元函数 友元类 内部类 匿名对象 ⭐友元 友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以 友元不宜多用。 友元分为:友元函数和友元类。 ⚡友元函数 先看一个问题&#x…

React18源码: Fiber树中的全局状态与双缓冲

Fiber树构造 在React运行时中,fiber树构造位于 react-reconciler 包在正式解读 fiber 树构造之前,再次回顾一下renconciler的4个阶段 1.输入阶段:衔接react-dom包,承接fiber更新请求2.注册调度任务:与调度中心(schedu…

Nginx网络服务四-----日志、Nginx压缩和ssl

1.自定义访问日志 如果访问出错---404,可以去看error.log日志信息 访问日志是记录客户端即用户的具体请求内容信息,而在全局配置模块中的error_log是记录nginx服务器运行时的日志保存路径和记录日志的level,因此两者是不同的,而且…

机器视觉【3】非线性求解相机几何参数

线性求解相机几何参数的缺点 上一章节介绍学习了(DLT)线性求解相机几何参数,了解到线性求解法当中比较明显的缺点: 没有考虑到镜头畸变的影响不能引入更多的约束条件融入到DLT算法当中优化最关键的是,代数距离并不是…

Python入门学习——基础语法

一、Python解释器 1. Python解释器的作用是&#xff1a; 将Python代码翻译成计算机认识的O和1并提交计算机执行在解释器环境内可以一行行的执行我们输入的代码也可以使用解释器程序&#xff0c;去执行".py"代码文件 2. Python解释器程序在&#xff1a; <Python…

Jenkins详解

目录 一、Jenkins CI/CD 1、 Jenkins CI/CD 流程图 2、介绍 Jenkins 1、Jenkins概念 2、Jenkins目的 3、特性 4、产品发布流程 3、安装Jenkins 1、安装JDK 2、安装tomcat 3.安装maven 4安装jenkins 5.启动tomcat&#xff0c;并页面访问 5.添加节点 一、Jenkins CI/…