csv、json 文件读取
1、CSV 文件存储
1.1 写入
简单示例
import csv
with open('data.csv', 'a') as csvfile:
    writer = csv.writer(csvfile)       # 初始化写入对象,传入文件句柄
    writer.writerow(['id', 'name', 'age'])      # 调用 writerow() 方法传入每行的数据
    writer.writerow(['1', 'rose', '18'])
    writer.writerow(['2', 'john', '19'])
以文本方式打开,分隔符默认为逗号(,):
id,name,age
1,rose,18
2,john,19

修改默认分隔符:
writer = csv.writer(csvfile, delimiter=' ')   	# 以空格为分隔符
同时写入多行:
# 此时参数为二维列表
writer.writerow([['1', 'rose', '18'], ['2', 'john', '19']])
避免出现空行,可以在写入时加 newline='':
with open("test.csv", "a+", newline='') as csvfile:
如果数据源是字典
import csv
with open('data1.csv', 'a') as csvfile:
    fieldnames = ['id', 'name', 'age']      # 定义表头
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)         # 初始化一个字典,将文件句柄和表头传入
    writer.writeheader()        # 写入表头
    writer.writerow({'id': '1', 'name': 'rose', 'age': 18})     # 写入表格中具体内容
编码问题,需要指定 open() 函数编码格式:
open('data.csv', 'a', encoding='utf-8')
另外 pandas 库的  DataFrame 对象的 to_csv() 方法也可以将数据写入 csv 中。
1.2 读取
import csv
with open('data1.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)
结果如下:
['id', 'name', 'age']
['1', 'rose', '18']
Tips:如果有中文需要指定文件编码
pandas 库的 read_csv() 方法
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
运行结果如下:
   id  name  age
0   1  rose   18
1   2  john   19
1.3 避免重复插入表头
#newline的作用是防止每次插入都有空行
with open("test.csv", "a+", newline='') as csvfile:		# 必须使用 a+,追加方式
        writer = csv.writer(csvfile)
        #以读的方式打开csv 用csv.reader方式判断是否存在标题。
        with open("test.csv", "r", newline="") as f:
            reader = csv.reader(f)
            if not [row for row in reader]:
                writer.writerow(["型号", "分类"])
                writer.writerows([[keyword, miaoshu]])
            else:
                writer.writerows([[keyword, miaoshu]])
示例
爬取一下该网站的所有评论:https://www.bestbuy.ca/en-ca/product/hp-hp-officejet-pro-6968-all-in-one-inkjet-printer-with-fax-6968/10441056/review
import requests
import time
import csv
headers = {
        "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) "
                      "Version/11.0 Mobile/15A372 Safari/604.1",
        "Referer": "https://www.bestbuy.ca/en-ca/product/hp-hp-officejet-pro-6968-all-in-one-inkjet-printer-with-fax-"
                   "6968/10441056/review"
    }
def get_content(url):
    """爬取数据"""
    res = requests.get(url=url, headers=headers)
    # print(res.status_code)
    return res.json()
def parse_res(res):
    """解析数据"""
    csv_data = {}
    # print(res, type(res))
    data = res["reviews"]
    for i in data:
        csv_data["title"] = i["title"]
        csv_data["comment"] = i["comment"]
        csv_data["publish"] = i["reviewerName"]
        csv_data["publish_time"] = i["submissionTime"]
        print(csv_data)
        save_data(csv_data)
def save_data(csv_data):
    """存储数据"""
    with open('data.csv', 'a+', newline='') as csvfile:
        # 以读的方式打开 csv,判断表格是否有数据
        with open('data.csv', 'r', newline='') as f:
            reader = csv.reader(f)
            fieldnames = ['title', 'comment', 'publish', 'publish_time']
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)		# DictWriter: 字典
            if not [row for row in reader]:
                writer.writeheader()
                writer.writerow(csv_data)
            else:
                writer.writerow(csv_data)
if __name__ == '__main__':
    for i in range(1, 11):
        url = 'https://www.bestbuy.ca/api/v2/json/reviews/10441056?source=all&lang=en-CA&pageSize=10&page=%s' \
              '&sortBy=date&sortDir=desc' % i
        res = get_content(url)
        time.sleep(2)
        parse_res(res)
参考文章:https://blog.csdn.net/qq_41817302/article/details/88680886
2. JSON 文件存储
2.1 读取 JSON
import json
s = '''
    [{
        "name": "rose",
        "gender": "female",
        "age": "18"
    }]
'''
data = json.loads(s)
print(data)
print(type(data))
运行结果如下:
[{'name': 'rose', 'gender': 'female', 'age': '18'}]
<class 'list'>			# 因为最外层是列表
读取 JSON 文件
with open('data.json', 'r') as f:
    s = f.read()
    data = json.loads(s)
    print(data)
2.2 输出 JSON
import json
data = [{
        "name": "rose",
        "gender": "female",
        "age": "18"
    }]
with open('data.json', 'a') as f:
    f.write(json.dumps(data))
缩进 2 个字符,这样结构更清晰:
with open('data.json', 'a') as f:
    f.write(json.dumps(data, indent=2))
运行结果如下:
[
  {
    "name": "rose",
    "gender": "female",
    "age": "18"
  }
]
如果输出的包含中文,须臾指定参数 ensure_ascii=False,否则默认转换为 Unicode 字符:
with open('data.json', 'a') as f:
    f.write(json.dumps(data, indent=2, ensure_ascii=False))
												
											csv、json 文件读取的更多相关文章
- springboot~openfeign从JSON文件读取数据
		
对openfeign不清楚的同学可以先看我这篇文章:springboot~openfeign从此和httpClient说再见 对于openfeign来说,帮助我们解决了服务端调用服务端的问题,你不需要 ...
 - 14.json文件读取
		
json文件读取 1.#读取json import json str='''[ { "name":"Tom", "gender":" ...
 - 曹工说Spring Boot源码(4)--  我是怎么自定义ApplicationContext,从json文件读取bean definition的?
		
写在前面的话 相关背景及资源: 曹工说Spring Boot源码系列开讲了(1)-- Bean Definition到底是什么,附spring思维导图分享 工程代码地址 思维导图地址 工程结构图: 大 ...
 - JsonResult序列化并保存json文件 以及对json文件读取反序列
		
项目中我们经常遇到一些经常访问的接口,并且更新及时度不是特别高,那么我们可以利用文件来做一些数据请求的缓存. 这里以微信公众号获取粉丝用户列表为例,我们把微信公众号查到的用户先缓存在文件中,这样在翻页 ...
 - SpringBoot JSON文件读取
		
@Componentpublic class StepExecutor implements Runnable { @Value("classpath:menu.json") pr ...
 - cocos2d-x之json文件读取初试
		
rapidjson::Document d; d.Parse<0>(FileUtils::getInstance()->getStringFromFile("data_2. ...
 - Unity 用C#脚本读取JSON文件数据
		
读取JSON文件数据网上有很多方法吗,这里采用SimpleJSON,关于SimpleJSON的介绍参考以下链接:http://wiki.unity3d.com/index.php/SimpleJSON ...
 - 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
		
命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...
 - Asp.Net MVC 读取json文件
		
有些系统上面的配置可以做成config里面的appsetting.这里要求写在json文件里面. 首先 添加命名空间 using Newtonsoft.Json; using System.IO; u ...
 
随机推荐
- js之juery
			
目录 JQuery 属性选择器: 操作标签 文本操作 属性操作 文档处理 事件 JQuery 属性选择器: 属性选择器: [attribute] [attribute=value]// 属性等于 [a ...
 - 【BigData】Java基础_创建一个订单类
			
需求描述 定义一个类,描述订单信息订单id订单所属用户(用户对象)订单所包含的商品(不定数量个商品对象)订单总金额订单应付金额: 总金额500~1000,打折85折 总金额1000~150 ...
 - 每日一问:简述 View 的绘制流程
			
Android 开发中经常需要用一些自定义 View 去满足产品和设计的脑洞,所以 View 的绘制流程至关重要.网上目前有非常多这方面的资料,但最好的方式还是直接跟着源码进行解读,每日一问系列一直追 ...
 - Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群
			
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
 - exports与module.exports的区别,以及export与export.defult的区别
			
在 JS 模块化编程的模块引入上, 主要有两种方式: CommonJS 模块标准 ES6 moduel 特性 1. CommonJS 模块引入:require() 模块导出:exports 或者 mo ...
 - linux   ------  在Vm 安装  centos系统
			
------------- 简介 熟悉的操作系统*(android apple windows) 主要分类 1.应用领域(桌面.服务器.嵌入式) 2.源码开放程度(开源.闭源) 3.所支持的用户数 ...
 - 【转帖】Alpha、Beta、RC、GA版本的区别
			
[版本]Alpha.Beta.RC.GA版本的区别 https://www.jianshu.com/p/d69226decbfe Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测 ...
 - C语言有关文件编辑的函数
			
fopen()函数 函数作用 用来打开一个文件 头文件 #include <stdio.h> 用法 FILE *fopen(char *filename, *type); TYPES &q ...
 - Shell获取指定区间随机未占用的端口号
			
说明 最近在写Jenkins自动运维的脚本,由于是用的docker,部署的时候启动容器端口号冲突会导致部署失败,用的微服务也不在乎端口什么的,只求部署成功,所以想了很久,参考了一些文章,还有运维大哥的 ...
 - 【题解】【网络流24题】航空路线问题 [P2770] [Loj6122]
			
[题解][网络流24题]航空路线问题 [P2770] [Loj6122] 传送门:航空路线问题 \([P2770]\) \([Loj6122]\) [题目描述] 给出一张有向图,每个点(除了起点 \( ...