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 文件读取的更多相关文章

  1. springboot~openfeign从JSON文件读取数据

    对openfeign不清楚的同学可以先看我这篇文章:springboot~openfeign从此和httpClient说再见 对于openfeign来说,帮助我们解决了服务端调用服务端的问题,你不需要 ...

  2. 14.json文件读取

    json文件读取 1.#读取json import json str='''[ { "name":"Tom", "gender":" ...

  3. 曹工说Spring Boot源码(4)-- 我是怎么自定义ApplicationContext,从json文件读取bean definition的?

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码系列开讲了(1)-- Bean Definition到底是什么,附spring思维导图分享 工程代码地址 思维导图地址 工程结构图: 大 ...

  4. JsonResult序列化并保存json文件 以及对json文件读取反序列

    项目中我们经常遇到一些经常访问的接口,并且更新及时度不是特别高,那么我们可以利用文件来做一些数据请求的缓存. 这里以微信公众号获取粉丝用户列表为例,我们把微信公众号查到的用户先缓存在文件中,这样在翻页 ...

  5. SpringBoot JSON文件读取

    @Componentpublic class StepExecutor implements Runnable { @Value("classpath:menu.json") pr ...

  6. cocos2d-x之json文件读取初试

    rapidjson::Document d; d.Parse<0>(FileUtils::getInstance()->getStringFromFile("data_2. ...

  7. Unity 用C#脚本读取JSON文件数据

    读取JSON文件数据网上有很多方法吗,这里采用SimpleJSON,关于SimpleJSON的介绍参考以下链接:http://wiki.unity3d.com/index.php/SimpleJSON ...

  8. 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

    命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...

  9. Asp.Net MVC 读取json文件

    有些系统上面的配置可以做成config里面的appsetting.这里要求写在json文件里面. 首先 添加命名空间 using Newtonsoft.Json; using System.IO; u ...

随机推荐

  1. 洛谷 P3373 【模板】线段树 2 题解

    P3373 [模板]线段树 2 题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 输入格式 第一行包含三个整数 ...

  2. 【CSP-S膜你考】不怕噩梦 (模拟)

    不怕噩梦 题面 蚊子最近经常做噩梦,然后就会被吓醒.这可不好.. 疯子一直在发愁,然后突然有一天,他发现蚊子其实就是害怕某些事. 如果那些事出现在她的梦里,就会害怕. 我们可以假定那个害怕的事其实是一 ...

  3. Flask 中的 request 之 先知道有这么个东西

    每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的 为了了解Flask的request中都有什么东西,首先我们要写一个前后端的交互 基于HTML + Flask 写一 ...

  4. ##xcode 文件模板自定义

    xcode 文件模板自定义 在使用xcode内部模板创建C++类文件时,创建出来的头文件是.hpp结尾的,但是我想用.h结尾的, 所以就网上找了下资料看能不能自定义模板,这样还可以修改文档注释.在网上 ...

  5. 深入理解 HTTP/1.x、HTTP/2 和 HTTPS

    很多站长可能到现在都没有理解 HTTP/1.x.HTTP/2 和 HTTPS 之间的区别和关系吧?说实话,明月也是“一知半解”的水准而已,今天看到了这篇文章感觉总结还算是比较全面,特此分享出来给大家就 ...

  6. 展示时测试Markdown渲染

    \begin{equation} %公式 Speedup_{overall} = \frac{1}{{(1-Fraction_{partitioned})} +\frac{Fraction_{part ...

  7. cad.net IExtensionApplication接口的妙用 分开写"启动运行"函数

    cad提供的 IExtensionApplication 接口 是不能实现一次以上的,那么这给编写代码带来了一种不好的情况是,每次都要去修改实现这个接口的类, 如果是一个小的测试功能,你又要去动前面的 ...

  8. Zookeeper简单入门

    官网地址https://zookeeper.apache.org/releases.html 下载https://mirrors.tuna.tsinghua.edu.cn/apache/zookeep ...

  9. golang开始篇

    一   First Golang 1.1 需求 第一个程序hello.go,可以输出"hello golang" 1.2 开发步骤 开发这个程序时,我们的目录结构怎么处理(让自己或 ...

  10. nginx location指令详解

    Nginx的HTTP配置主要包括三个区块,结构如下: http { //这个是协议级别 include mime.types; default_type application/octet-strea ...