csv,json格式数据的读写
#!python3
# -*- coding:utf-8 -*-
#CSV stands for "comma-separated values",and CSV files are simplified spreadsheets stored as plaintext files.
#CSV 以文本的形式存储Excel类型的数据,每个数据以逗号分隔
#JSON(is short for JavaScript Object Notation) is a format that stores information as JavaScript source code in plaintext files.
#CSV文件的特征:不具备数据类型,每个值都是a string ;不能加粗或上色;不能用公式;不能调整行高或列宽等
import csv
#读csv文件
exampleFile=open('C:\\Users\\li.wu\\Desktop\\CFP_CHAN_RATE.csv',newline='',encoding='UTF-8')
exampleReader=csv.reader(exampleFile)
#最直接的方式就是将csv的reader转换成list
exampleData=list(exampleReader)
print(exampleData)
print(exampleData[0][0])
#也可用循环的方法依次读出,(?只是读过1次后,exampleReader中就没有数据了,所以下面的for方法就没有读出数据)
#for row in exampleReader:
# print('Row #' + str(exampleReader.line_num) + ' ' + ','.join(row))
#csv的reader对象的line_num属性可以返回所在行的行号。
#写csv文件
outputFile=open('e:\work\output.csv','w',newline='') #如果不设置入参newline数据就会占用两倍的空间
outputWriter=csv.writer(outputFile)
outputWriter.writerow(['spam','eggs','bacon','ham'])
outputWriter.writerow(['Hello,world!','eggs','bacon','ham'])
outputWriter.writerow([1,2,3.141592,4])
outputFile.close()
#如果想以其他的符号为分隔符,可以传递参数delimiter='\t',lineterminataor='\n\n'
outputFile=open('e:\work\output.csv','w',newline='') #经测试,设置换行符lineterminator和newline=''会使换行符消失
outputWriter=csv.writer(outputFile,delimiter='\t',lineterminator='\n\n')
outputWriter.writerow(['apples','oranges','grapes'])
outputWriter.writerow(['eggs','oranges','grapes'])
outputWriter.writerow(['apples','oranges','grapes','spam','spam','spam'])
outputFile.close()
#JSON is useful to know,because many websites offer JSON content as a way for programs to interact with the website.
#This is known as providing an application programming interface(API)
#json只能包含下列的Python数据类型:strings,integers,floats,Booleans,lists,dictionaries,and NoneType.
#json 不能表达Python中的一些具体的对象,例如 File object,CSV Reader or Writer objects,Regex objects ,or selenium WebElement objects .
#json.loads() means "load string " not "loads"
stringOfJsonData='{"name":"Zophie","isCat":true,"miceCaught":0,"felineIQ":null}'
import json
#将字符串类型的json数据转化为python的dic 类型数据
jsonDataAsPythonValue=json.loads(stringOfJsonData)
print(jsonDataAsPythonValue)
#将Python的dic型数据转化为字符串型的json数据。
pythonValue={'isCat':True,'miceCaught':0,'name':'Zophie','felineIQ':None}
stringOfJsonData=json.dumps(pythonValue)
print(stringOfJsonData)
#{'felineIQ': None, 'isCat': True, 'miceCaught': 0, 'name': 'Zophie'}
#{"felineIQ": null, "isCat": true, "miceCaught": 0, "name": "Zophie"}
#JSON
#如果要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,如XML,但更好的方法是序列化为json,因为json表示出来就是一个字符串,可以被所有语言
#读取,也可以方便地存储到磁盘或者通过网络传输。json不仅是标准格式,并且比XML更快,可以直接在web页面中读取,很方便。
#json表示的对象就是标准的JavaScript语言对象,json和Python内置的数据类型对应如下:
'''
JSON类型 Python类型
{} dict
[] list
"string" str
1234.56 int或float
true/false True/False
null None
'''
#json模块提供完善的Python对象到JSON格式的转换
import json
d=dict(name='Bob',age=20,score=88)
print(json.dumps(d))
#{"score": 88, "age": 20, "name": "Bob"}
#dumps()方法返回一个str,内容就是标准的json。类似的,dump()方法可以直接把json写入一个file-like object .
#要把json反序列化为Python对象,用loads()或者对应的load()方法,前者把json的字符串反序化,后者从file-like object 中读取字符串并反序列化:
json_str='{"score": 88, "age": 20, "name": "Bob"}'
print(json.loads(json_str))
#{'age': 20, 'score': 88, 'name': 'Bob'}
#由于json标准规定json编码是UTF-8,所以我们总是能正确地在Python的str与json的字符串之间转换。
#Python的dict对象可以直接序列化为json的{},如果其他类型的对象需要转化为json格式,就需要先转化成dict的形式。
#需要把类实例转化成json对象,可以为这个类写一个函数,将其转化成dict形式:
class Student(object):
def __init__(self,name,age,score):
self.name=name
self.age=age
self.score=score
s=Student('Bob',20,88)
def student2dict(std):
return{
'name':std.name,
'age':std.age,
'score':std.score
}
#这样,Student实例首先被student2dict()函数转换成dict,然后再被序列化为json:
print(json.dumps(s,default=student2dict))
#{"score": 88, "name": "Bob", "age": 20}
#default参数相当于在序列化对象s前,先用函数加工一下s.
#由于一般class的实例都有一个__dict__属性,用来存储实例变量(也有少数例外,比如定义了__slots__的class),于是我们可以把任意clas实例变为dict:
print(json.dumps(s,default=lambda obj:obj.__dict__))
#同理,要把json反序列化为一个Student对象实例,loads()方法首先转换出一个dict对象,然后,我们传入的object_hook函数负责把dict转换为Student实例:
def dict2student(d):
return Student(d['name'],d['age'],d['score'])
json_str='{"age":20,"score":88,"name":"Bob"}'
print(json.loads(json_str,object_hook=dict2student))
#<__main__.Student object at 0x0000013C5CE95908>
#object_hook参数相当于在反序列化对象json_str称为dict后,再讲dict用函数加工成类实例
'''
python语言特定的序列化模块时pickle,但是如果要把序列化搞得更通用、更符合web标准,就可以使用json模块。
json模块的dumps()和loads()函数是定义得非常好的接口的典范。当我们使用时,只需传入一个必须的参数。但是,当默认的序列化或反序列机制不满足我们的要求
时,又可以传入更多的参数来定制序列化或反序列化的规则,既做到了接口简单易用,又做到了充分的扩展性和灵活性。
'''
csv,json格式数据的读写的更多相关文章
- jmeter 导入csv数据中json格式数据取值不完整
1.jmeter中添加csv数据文件时,数据是json格式 2.jmeter中执行取值发现只取了一部分 分析原因,json格式数据,中间有逗号,而csv是根据逗号来分割的,这回导致我们取值错位. 解决 ...
- Android读取JSON格式数据
Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...
- iOS开发之JSON格式数据的生成与解析
本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...
- 解析json格式数据
实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...
- ios网络学习------6 json格式数据的请求处理
ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...
- fastJson java后台转换json格式数据
什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...
- ajax请求后台,返回json格式数据,模板!
添加一个用户的时候,需要找出公司下所有的部门,和相应部门下的角色,利用ajax请求,实现联动技术.将返回的json格式数据,添加到select标签下. <script type="te ...
- 使用C#中JavaScriptSerializer类将对象转换为Json格式数据
将对象转换为json格式字符串: private JavaScriptSerializer serializer = new JavaScriptSerializer(); protected voi ...
- 使用getJSON()方法异步加载JSON格式数据
使用getJSON()方法异步加载JSON格式数据 使用getJSON()方法可以通过Ajax异步请求的方式,获取服务器中的数组,并对获取的数据进行解析,显示在页面中,它的调用格式为: jQuery. ...
随机推荐
- Python全栈开发-Day1-Python基础1
目录 Python介绍 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语句 表达式f ...
- 最短路径遍历所有的节点 Shortest Path Visiting All Nodes
2018-10-06 22:04:38 问题描述: 问题求解: 本题要求是求遍历所有节点的最短路径,由于本题中是没有要求一个节点只能访问一次的,也就是说可以访问一个节点多次,但是如果表征两次节点状态呢 ...
- python爬虫学习(三):使用re库爬取"淘宝商品",并把结果写进txt文件
第二个例子是使用requests库+re库爬取淘宝搜索商品页面的商品信息 (1)分析网页源码 打开淘宝,输入关键字“python”,然后搜索,显示如下搜索结果 从url连接中可以得到搜索商品的关键字是 ...
- Very Good Article on How Git Commands Work
http://stackoverflow.com/questions/30038999/differences-between-commit-commit-and-push-commit-and-sy ...
- MySQL Connector/J
5.1 Developer Guide 1. MysQL为由Java语言编程的客户端程序提供连接:MySQL Connector/J,这是一个实现Java Database Connectivity( ...
- 《HTTP 权威指南》笔记:第十三章 摘要认证体制
前言 基本认证存在缺陷,摘要认证为了解决基本认知的一些缺陷,进行了进一步的完善,更加安全. 流程 摘要认证的特点是:永远不会以明文方式在网络上发送密码原理:通过发送一个「指纹」或者「密码的摘要」来验证 ...
- 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形菜单加载父/子节点
jQuery EasyUI 树形菜单 - 树形菜单加载父/子节点 通常表示一个树节点的方式就是在每一个节点存储一个 parentid. 这个也被称为邻接列表模型. 直接加载这些数据到树形菜单(Tree ...
- ActionCable的部署(参考Gorails)
Gorails视频 https://gorails.com/deploy/actioncable Action Cable – Integrated WebSockets for Rails http ...
- android------Eclipse Memory Analyzer (MAT)
简单介绍 MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗. 使用内 ...
- ASP.NET发送电子邮件(转)
原始地址:http://www.cnblogs.com/ForEvErNoME/archive/2012/06/05/2529259.html(有代码下载,博主真是有操守) 1.补充知识 (1)POP ...