#!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. ThinkPHP3.2.3中使用smarty模板引擎循环

  2. Solaris 10 disable ipv6

    亲测有效:) http://thegeekdiary.com/how-to-remove-ipv6-in-solaris-11/

  3. spring cloud: Hystrix(四):feign类似于hystrix的断容器功能:fallback

    spring cloud: Hystrix(四):feign使用hystrix @FeignClient支持回退的概念:fallback方法,这里有点类似于:@HystrixCommand(fallb ...

  4. php解析处理java的btye字节;php解析处理java的ByteArrayOutputStream字节流/数据流

    php解析处理java的btye字节:php解析处理java的ByteArrayOutputStream字节流/数据流 一般java的字节流: 就是t public class Test { publ ...

  5. 雷林鹏分享:XML 树结构

    XML 树结构 XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶". 一个 XML 文档实例 XML 文档使用简单的具有自我描述性的语法: To ...

  6. English trip M1 - PC6 Likes and Dislike Teacher:Jade

    In this lesson you will learn to talk about likes and dislikes. 课上内容(Lesson) # 通常在习惯性的表达式用 it's 来表达w ...

  7. 自定义广播(BroadcastReceiver)事件 --Android开发

    本例演示自定义广播事件.我们需要做的是,在主活动中写发送广播的代码,然后在接收广播的类中写接收广播的代码. 1.主活动中点击按钮后发送广播 MainActivity.java: public clas ...

  8. Pytorch的Reproducibility(可复现性)

    对于Pytorch的结果复现,在不同版本的pytorch或者不同的硬件平台之间,不能够保证结果是完全一致的,即使在CPU和GPU上采用相同的随机数种子. 关于torch.backend.cudnn.b ...

  9. AS(Android Studio)不停的updating indices

    有同事问我他as进入后updating iindices个不停 就在此处一直刷一直刷,虽然对他项目没什么影响,但总归很是烦人,解决办法如下: 打开File->Invalidate Caches ...

  10. python记录_day17 类与类之间的关系

    一.依赖关系 a类的对象是b类方法的参数 这种关系是我用着你,但你不属于我,比如公司和临时工的关系,是很弱的一种关系 class Zhiwu: def __init__(self,name,atk): ...