c++ 读写excel_每天10分钟,轻松入门python,json、csv等读写

2023-11-03

JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。这种数据在弄爬虫的时候,经常会见到这类型的数据。下面展示一个简单的json数据。

{
    "name": "json",
    "describe": "是存储和交换文本信息的语法。类似 XML。"
}
#带[]的类型
{
    "key": ["a", "b", "sojson.com"]
}
#更复杂一些的类型
{
    "title": "python 入门",
    "type": "新手入门",
    "本篇内容": [
        "JSON描述",
        "JSON数据读取",
        "JSON数据构造",
        "CSV",
        {
            "office": [
                "word",
                "xls"
            ]
        }
    ],
    "欢迎交流": {
        "独学而无友,则孤陋寡闻": "私信"
    }
}

很想python的字典格式吧?键:值的对应关系。如果要操作json的模块,那么就需要用到json模块。

Python与JSON相互转换

#python转换为json
import json
data = {
    'name' : 'bird',
    'color' : 'black',
    'weight' : 50
}

json_str = json.dumps(data)

#json转换为python数据
data = json.loads(json_str)

json模块中重要,常用的函数如下:

  • dump - 将Python对象按照JSON格式序列化到文件中
  • dumps - 将Python对象处理成JSON格式的字符串。
  • load - 将文件中的JSON数据反序列化成对象。
  • loads - 将字符串的内容反序列化成Python对象

使用的时候请注意其中的差别。比如dumps,指的是将Python对象处理成JSON格式的字符串,而loads指的是将字符串的内容反序列化成Python对象

注意粗体字部分。dump是将python对象保存到文件中(json格式)。load是读取文件中的json数据返回对象。这两个方法都和文件有关。用法如下:

#python转换为json
import json
data = {
    'name' : 'bird',
    'color' : 'black',
    'weight' : 50
}
#dump()接受2个参数,第一个是接受数据的参数,第二是写入的文件描述。
with open("test.json", "w") as fp:
    json.dump(data, fp)

with open(test.json,'r') as fp:
    contents = json.load(fp)
print(contents)

csv,xls文件读写

某些小场合,并不需要用到mysql这类型的大型数据库,这时候就需要csv和xls表格应用出场了。CSV (Comma Separated Values) 格式是电子表格和数据库中最常见的输入、输出文件格式。假设一份csv文件内容如下:

#方法原型
csv.reader(csvfile, dialect='excel', **fmtparams)

#例子说明          
import csv
with open('test.csv', 'r', newline='', encoding='utf-8') as f:
    data =csv.reader(f)

for da in data:
    print(da)

#输出如下
['A', 'B', 'C', 'D', 'E', '总结']
['啊', '啊吧', '啊C', '啊d', '啊e', '0.00%']
['啊水电', '的', '0', '0', '3', '0.00%']
['ddd', '0', '0', '0', '3', '0.00%']

csv.reader返回一个reader对象,该对象将逐行遍历f(就是打开的文件描述)。只要支持iterator协议,如果f(csvfile)是文件对象,打开时应该用newline=''。encoding='utf-8',这里主要考虑是如果打开提示编码错误,这里先做一个规避,有时候用了encoding反而提示出错,参考在windows下是cp936编码。

关于分隔符,默认csv是用逗号进行分隔,也可以自己在reader方法中指定,参数是delimiter,直接在参数中提现即可,如:

csv.reader(csvfile, delimiter=';')

更多的参数需要参考python官方文档。

使用csv.writer(csvfile, dialect='excel', **fmtparams),写入内容到test.csv文件中。

#方法原型
csv.writer(*csvfile*, *dialect='excel'*, ***fmtparams*)

#例子说明          
import csv
with open('test.csv', 'a+', newline='') as f:
    file_input = csv.writer(f)
    file_input.writerow(['eee', 'bbb', 'aa', '22%', 'yy', 'sss'])

csv.writer返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。其中默认的分隔符为“,”逗号。这些扩展知识大家可以自行百度,可以在writer的参数中改变默认的分隔符等行为。

writerow()该方法,会将内容以逗号为分隔符,将内容分割放入同一行的每一列中。还有一个writerrows(),这个方法有什么不同的?

#例子说明          
import csv
with open('test.csv', 'a+', newline='') as f:
    file_input = csv.writer(f)
    file_input.writerows([['eee'], ['bbb'], ['aa'], ['22%'], ['yy'], ['sss']])
#输出结果居然是这样,运行后打开test.csv文件,文件内加入了的内容如下
eee
bbb
aa
22%
yy
sss

writerows()将二维列表中的每一个列表写为一行。二维列表是关键,就是这个方法是处理多项数据的。

csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)。创建一个对象,该对象在操作上类似于常规 reader,但是将每行中的信息映射到一个 [dict],该 dict 的键由 fieldnames 可选参数给出。fieldnames参数是一个序列。如果省略 fieldnames,则文件 f 第一行中的值将用作字段名。无论字段名是如何确定的,字典都将保留其原始顺序。

#例子说明          
import csv
with open('test.csv', 'r', newline='', encoding='utf-8') as f:
    data = csv.DictReader(f)
    #print(data)
    for da in data:
        print(da)
{'A': '啊', 'B': '啊吧', 'C': '啊C', 'D': '啊d', 'E': '啊e', '总结': '0.00%'}
{'A': '啊水电', 'B': '的', 'C': '0', 'D': '0', 'E': '3', '总结': '0.00%'}
{'A': 'ddd', 'B': '0', 'C': '0', 'D': '0', 'E': '3', '总结': '0.00%'}

csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)。与writer类似,创建一个对象,将字典映射到输出行,fieldname是序列,指定了字典中的值的顺序。会按照指定顺序传递给writerrow()写入文件f。

注意,与DictReader 类不同, DictWriter类的 fieldnames参数不是可选参数。

如果字典缺少 fieldnames中的键,则可选参数 restval 用于指定要写入的值。就是说如果要输入的值中缺少了键,则有restval指定值。

如果传递给 writerow()方法的字典的某些键在 fieldnames 中找不到,则可选参数 extrasaction用于指定要执行的操作。 如果将其设置为默认值 'raise',则会引发 [ValueError]。 如果将其设置为 'ignore',则字典中的其他键值将被忽略。

import csv
#直接在test.csv中追加内容。
with open('test.csv', 'a+', newline='') as f:
    filednames = ['A', 'B', 'C', 'D', 'E', '总结']
    writer = csv.DictWriter(f, fieldnames=filednames, restval='None')
    #如果是新建的文件,需要写入表头'A', 'B', 'C', 'D', 'E', '总结',就使用
    #writer.writeheader() 
    writer.writerow({'A': 'Baked', 'B': 'Beans'})

with open('test.csv', 'r', newline='') as f:    
    reader = csv.DictReader(f)
    for read in reader:

#输出
{'A': '啊', 'B': '啊吧', 'C': '啊C', 'D': '啊d', 'E': '啊e', '总结': '0.00%'}
{'A': '啊水电', 'B': '的', 'C': '0', 'D': '0', 'E': '3', '总结': '0.00%'}
{'A': 'ddd', 'B': '0', 'C': '0', 'D': '0', 'E': '3', '总结': '0.00%'}
{'A': 'Baked', 'B': 'Beans', 'C': 'None', 'D': 'None', 'E': 'None', '总结': 'None'}

可以看到最后一行,{'A': 'Baked', 'B': 'Beans'}已经写入文件中,并且没有指定的键值C,D,E那些都已经按照预设的restval设置正确。

这里只是涉及到csv的读写,那么xls文档该如何操作?下一次将学习该内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ 读写excel_每天10分钟,轻松入门python,json、csv等读写 的相关文章

  • SpringBoot+Vue校园学习成绩管理系统

    简介 本项目采用了基本的springboot vue设计的校园学习成绩管理系统 详情请看截图 经测试 本项目正常运行 本项目适用于Java毕业设计 课程设计学习参考等用途 项目描述 项目名称 SpringBoot Vue校园学习成绩管理系统
  • Hyperledger Fabric 带入门 Python 课程

    Hyperledger Fabric 带入门 Python 课程 Hyperledger Fabric 是一个开源的区块链框架 被广泛应用于企业级联盟链场景 Python 是一种高级编程语言 易于学习和使用 是区块链领域的热门语言之一 本文
  • 数字表达_金字塔神秘数字之谜!142857这组神奇的数字表达着什么含义

    在埃及金字塔内 发现一组看似平凡 但很神奇的数字 142857 这组数字背后隐藏着人类无法解释的谜团 有人说这组数字和汶川大地震的时间偶合 这组数字隐藏了灾难发生的预言之秘 这到底是有心人无端的揣测 还是严谨的科学推论 142857这组数字
  • c++ list 容器splice函数

    list 的splice函数主要是用来合并两个list splice是list中特有的拼接方法 splice实现了不需要拷贝的list合并 即可以在常数时间内从list的一个区域拼接到另一个list的一个区域 也就是说splice是一个常数
  • ParallelLoopState.Break与ParallelLoopState.Stop区别

    ParallelLoopState Break与ParallelLoopState Stop区别 Break和Stop都是为了停止循环的一种手段 不同之处在于 Break不立马结束循环 而是要等所有小于ParallelLoopState L
  • shell脚本中调用java程序,并传递参数的方法

    为了方便运行多个java程序 选择写了脚本进行统一管理 简单介绍下传输参数的方法 假设要向file java传输参数 step1 需要先生成 class文件 javac Test java step2 在脚本中定义参数 int a 5 do
  • 拉格朗日插值多项式

    1 拉格朗日插值多项式 首先给出 n次插值基函数定义 若 n 次 多 项 式 l j
  • windows驱动开发8:虚拟摄像头方案

    一 摄像头框架 在业务场景中 有许多是需要应用能够通过摄像头的方式来访问相关的音视频数据 比如美颜 摄像头多路复用 IP摄像头接入视频会议等 这些功能通过虚拟摄像头的方式来实现 是一个比较通用的解决方案 那么如何及选用哪种技术方案来开发虚拟
  • SAR成像系列:【12】层析合成孔径雷达(层析SAR,Tomographic SAR,TomoSAR)

    自1995年Knaell为解决曲线SAR成像结果中的强旁瓣问题 将二维计算机断层 Computed Tomography 成像技术扩展到三维空间 并通过投影切片理论和后向投影算法获得了雷达成像三维空间的点响应函数 从而为分析三维成像分辨率和
  • __declspec(dllimport)的理解

    declspec dllimport MSDN中说明 不使用 declspec dllimport 也能正确编译代码 但使用 declspec dllimport 使编译器可以生成更好的代码 编译器之所以能够生成更好的代码 是因为它可以确定
  • windows 查看端口占用

    1 开始 运行 cmd 调出命令窗口 2 输入命令 netstat ano 列出所有端口的情况 在列表中我们观察被占用的端口 比如是49153 首先找到它 3 查看被占用端口对应的PID 输入命令 netstat aon findstr 4
  • 【云计算网络安全】解析DDoS攻击:工作原理、识别和防御策略

    文章目录 一 前言 二 什么是 DDoS 攻击 三 DDoS 攻击的工作原理 四 如何识别 DDoS 攻击 五 常见的 DDoS 攻击有哪几类 5 1 应用程序层攻击 5 1 1 攻击目标 5 1 2 应用程序层攻击示例 5 1 3 HTT
  • 打穿sqli-labs靶场第五天(less-7)文件写入

    打穿sqli labs靶场第五天 less 7 文件写入 环境配置 该关卡需要用到文件写入操作 所以需要开启MySQL中的文件写入 进入MySQL下的bin目录 用命令行连接数据库 查看是否开启文件写入 show variables lik
  • 代码规范化的七大原则

    代码规范化的七大原则 代码规范化基本上有七大原则 体现在空行 空格 成对书写 缩进 对齐 代码行 注释七方面的书写规范上 空行 定义变量后要空行 尽可能在定义变量的同时初始化该变量 即遵循就近原则 如果变量的引用和定义相隔比较远 那么变量的
  • 物体移动--通过改变transform--鼠标控制

    鼠标控制物体移动 1 物体移动到鼠标点击处 2 物体跟随鼠标移动 分为三步 获取鼠标位置 转化为世界坐标 物体移动 private Vector3 mopos private Vector3 gamepos void Start 物体的世界
  • 2022年计算机二级MS Office高级应用复习题及答案

    1 IP地址是一串难以记忆的数字 人们用域名来代替它 完成IP地址和域名之间转换工作的是 A 服务器 A DNS B URL C UNIX D ISDN 2 用高级程序设计语言编写的程序称为源程序 它 D A 只能在专门的机器上运行 B 无
  • 华为OD机试真题- 找出通过车辆最多颜色【2023Q1】【JAVA、Python、C++】

    题目描述 在一个狭小的路口 每秒只能通过一辆车 假如车辆的颜色只有3种 找出N秒内经过的最多颜色的车辆数量 三种颜色编号为0 1 2 输入描述 第一行输入的是通过的车辆颜色信息 0 1 1 2 代表4秒钟通过的车辆颜色分别是0 1 1 2
  • Java 基于协同过滤实现插画交流平台中的插画信息推荐功能

    Mahout 介绍 Mahout 是 Apache Software Foundation ASF 旗下的一个开源项目 提供一些可扩展的机器学习领域经典算法的实现 旨在帮助开发人员更加方便快捷地创建智能应用程序 Mahout包含许多实现 包
  • MyBatis增删改查(步骤详细,由浅入深,适合初学者,只看这一篇就够了)

    MyBatis目录 java 后端框架 MyBatis的使用 1 mybatis基本使用 2 mybatis工具类的封装和实现增删改查 3 mybatis中主要类的介绍 4 nybatis实现动态代理 使用的是反射机制 重点掌握 5 myb

随机推荐

  • [Pikachu靶场实战系列]RCE(远程系统命令执行)

    RCE介绍 exec ping 可以输入一个ip地址 结果发现页面无回显 难道不应该回显Ping命令的结果吗 不过我们不管他 继续下一步 在ip后用 分割再输入一个ls命令 发现ls命令被执行了 说明开发者没有做严格的安全控制 没有想到我们
  • python pandas 处理并excel 插入一列新的数据

    python pandas 处理excel并插入一列新的数据 接到个需求是在表格里塞入一列新的数据 假如分页的数据 页 条数 我们这是200条 页 用的是pandas import pandas as pd path excel room
  • Elasticsearch硬核入门教程(2022最全)

    Java全能学习 面试指南 https javaxiaobear cn 1 Elasticsearch概述 1 什么是Elasticsearch The Elastic Stack 包括 Elasticsearch Kibana Beats
  • 返回给定二叉树中一层最多的节点个数(仅使用队列实现)

    思路点拨 我们知道对二叉树实现层序遍历 也就是一层一层遍历 需要使用队列 而要找出节点最多的那一层 必然避不开要算出每一层节点的个数 那也就避不开层序遍历 除此之外 我们还需要维护几个变量 1 curend 当前层的最后一个节点 2 nex
  • Java基础之try catch finally的原理

    先看一段代码 public static int test int i 0 try System out println 业务执行 标记1 i 1 0 System out println 业务执行完成 i 标记2 return i cat
  • 双向循环神经网络

    双向循环神经网络结构图
  • LinuxRPM软件安装

    软件管理 软件安装介绍 学软件开发 各种台的软件熟练安装是必须要熟练掌握 大家都知道 Windows下安装软件时 只需用鼠标双击软件的安装程序 或者用Zip等解压缩软件解压缩即可安装 在android或者apple中安装软件时 只需要在手机
  • nginx前后端分离部署无法访问到后端接口

    先看一组错误案例 user nobody worker processes 1 error log logs error log error log logs error log notice error log logs error lo
  • 【程序运行时的两种环境】

    目录 前言 一 翻译环境 一 预编译 二 编译 三 汇编 四 链接 二 执行环境 三 补充 总结 前言 在ANSI C的任何一种实现中 都要经过两种环境 一种是编译环境 用于将程序代码转换为可执行的机器指令 二进制指令 另一种是执行环境 用
  • 【C++】细说C++中的数组之动态数组

    转载自如下位置 https blog csdn net u013921430 article details 79514972 以备学习
  • 前端引入和html标签

    先安装 flask模块 pip install flask from flask import Flask app Flask name 创建了网址 show info 和函数index的对应关系 以后用户在浏览器上访问 show info
  • 前端小程序面试题(一)

    首先说一些为什么总结小程序相关的面试题吧 我们可以随便打开一个招聘网站 在那里你会发现市场对于小程序的需求还是蛮高的 有些公司可能就只需要写小程序的前端人员 虽然小程序的开发很大一部分都是很简单的 但是有些常用的东西还是有必要了解一下的 故
  • Android代码实现APK文件的安装与卸载

    Android程序使用代码的安装和卸载 安装 String str CanavaCancel apk String fileName Environment getExternalStorageDirectory str Intent in
  • Zebra-VTYSH源码分析和改造(二):深入代码

    分析Zebra VTYSH的源码 首先从main函数开始 在ztysh main c中找到main函数 来进一步分析流程执行如下图所示 在平时的使用中我们会发现 配置的时候有很多的视图 View 每个视图中有不同的命令可供用户输入进行配置
  • STM32—Flash读写详解

    目录 前言 介绍 STM32 FLASH 闪存的编程和擦除 Flash读写的标准库函数 软件设计 FLASH的读取 直接读取某一地址的内容 读取选定位置的选定大小的内容 FLASH的写入 直接使用标准库写入 写入选定位置的选定大小的内容 如
  • mega328p-ADC,PWM,UART驱动

    ADC驱动 函 数 名 Ai Init 函数功能 Ai端口初始化 输入参数 void 输出参数 void 返 回 值 void 参考文档 void 创 件 人 程强刚 创建日期 2016 02 09 修改历史 void Ai Init vo
  • 身份认证之多因素身份认证(MFA)

    我们大多数人都同意密码是不安全的身份验证形式这一观点 更糟糕的是 它完全不智能 但这引发了一个问题 如果密码不是解决安全问题的答案 那什么是 目前 答案可能是多因素身份验证 MFA 多因素身份验证增加了一层关键的防御 MFA使用两个或多个因
  • Filter过滤器完成验证代码的封装

    Filter过滤器完成验证代码的封装 filter是什么 1 使用filter 2 filter配置到项目中 验证用户权限是需要反复使用的代码块 把他封装到filter中 减少代码冗余 filter是什么 init 方法 初始化方法 在创建
  • 主板上还剩啥?CPU整合GPU/北桥/南桥

    泡泡网主板频道2月6日 众所周知 主板上最重要 成本最高的两颗芯片 被称为北桥和南桥 其中北桥负责与处理器对接 主要功能包括 内存控制器 PCI E控制器 集成显卡 前 后端总线等 都是速度较快的模块 而南桥则负责外围周边功能 速度较慢 主
  • c++ 读写excel_每天10分钟,轻松入门python,json、csv等读写

    JSON的全称是 JavaScript Object Notation 意思是JavaScript对象表示法 它是一种基于文本 独立于语言的轻量级数据交换格式 这种数据在弄爬虫的时候 经常会见到这类型的数据 下面展示一个简单的json数据