#!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格式数据的读写的更多相关文章

  1. jmeter 导入csv数据中json格式数据取值不完整

    1.jmeter中添加csv数据文件时,数据是json格式 2.jmeter中执行取值发现只取了一部分 分析原因,json格式数据,中间有逗号,而csv是根据逗号来分割的,这回导致我们取值错位. 解决 ...

  2. Android读取JSON格式数据

    Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...

  3. iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  4. 解析json格式数据

    实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...

  5. ios网络学习------6 json格式数据的请求处理

    ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...

  6. fastJson java后台转换json格式数据

    什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...

  7. ajax请求后台,返回json格式数据,模板!

    添加一个用户的时候,需要找出公司下所有的部门,和相应部门下的角色,利用ajax请求,实现联动技术.将返回的json格式数据,添加到select标签下. <script type="te ...

  8. 使用C#中JavaScriptSerializer类将对象转换为Json格式数据

    将对象转换为json格式字符串: private JavaScriptSerializer serializer = new JavaScriptSerializer(); protected voi ...

  9. 使用getJSON()方法异步加载JSON格式数据

    使用getJSON()方法异步加载JSON格式数据 使用getJSON()方法可以通过Ajax异步请求的方式,获取服务器中的数组,并对获取的数据进行解析,显示在页面中,它的调用格式为: jQuery. ...

随机推荐

  1. 数据结构(C语言版)-第1章 绪论

  2. Confluence 6 创建一个空间

    在 Confluence 中并不限制你可以创建多少空间.你可以选择为你每一个小组,项目都创建一个空间,或者你也可以将这 2 者混合在一起.所有的这些都基于你的需求来决定的. 每一个 Confluenc ...

  3. Linux中计划任务、周期性任务设置

    Linux中计划任务.周期性任务设置 计划任务:指在未来的特定时间里,执行一次某一特定任务.当然,如果同一任务需要在不同时间点执行执行两次.三次或多次,可以视为多个一次看待. 周期性任务:指某一任务需 ...

  4. 廖雪峰网站:学习python基础知识(一)

    1. python能做什么? 可以做日常任务,比如自动备份你的MP3:可以做网站,很多著名的网站包括YouTube就是Python写的:可以做网络游戏的后台,很多在线游戏的后台都是Python开发的. ...

  5. Activiti搭建

    Activiti搭建 前期准备: JDK+Eclipse+Tomcat+Maven的安装与配置 参考:http://blog.csdn.net/zhshulin/article/details/307 ...

  6. php打印

    function preview() { bdhtml = window.document.body.innerHTML; sprnstr = "<!--startprint--> ...

  7. 使用axios请求数据,post请求出错。因为axios传递的请求参数是json格式,而后端接口要求是formData

    解决办法1:(IOS兼容性有问题,不推荐使用) // json格式转为formData格式,因为某些接口的原因 function json2formData(jsonData) { var param ...

  8. PostgreSQL主备流复制机制

    原文出处 http://mysql.taobao.org/monthly/2015/10/04/ PostgreSQL在9.0之后引入了主备流复制机制,通过流复制,备库不断的从主库同步相应的数据,并在 ...

  9. 使用SpringBoot集成ActiveMQ

    SpringBoot是个好东西,好多java常用的东西都被集成进去了 JMS 在 Spring Boot 中的使用 使用Spring/Spring Boot集成JMS的陷阱 Spring-boot J ...

  10. springcloud之eureka配置——eureka.instance

    1.在springcloud中服务的 Instance ID 默认值是: ${spring.cloud.client.hostname}:${spring.application.name}:${sp ...