#!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#接口实现技巧之借助第三方

    一个类继承了一个接口,对接口实现通常的做法---直接在这个类中对接口进行实现. 利用继承的概念,可以很巧妙地借助第三方类对接口进行实现,这种方式在实际的项目开发过程中其实用途很是比较大的,至少我们的游 ...

  2. 日常英语---七、[Updated November 14 at 4:10 PM PST] Scheduled Game Update - November 14, 2018(n.标准)

    日常英语---七.[Updated November 14 at 4:10 PM PST] Scheduled Game Update - November 14, 2018(n.标准) 一.总结 一 ...

  3. RESTful Web Services中API的设计原则(转)

    当下前后端分离的设计已经是web app开发的标配,但是如何设计一个强壮,扩展性好,又规范的API呢 参考以下link,可以得到需要有益的启示.同时个人推荐一本书<web API的设计和开发&g ...

  4. Confluence 6 配置边栏链接

    选择图标来显示或者隐藏,页面(pages),博客页面(blogs),快捷键(shortcuts )或者导航选项(navigation options).例如,如果你希望i的这个公开主要用于博客用途,你 ...

  5. Linux下查看相应端口的进程

    1)查找被占用的端口:netstat -tln | grep 7777 2)查看被占用端口的PID:lsof -i:7777 3)禁用使用kill -9 PID来禁用端口进程

  6. AutoMatic merge failed;fix conflicts and then commit the result.解决方法

    意思是: 冲突内容:合并冲突在 XXXX.DS_Store文件中 自动合并失败:修改冲突然后提交修改后的结果. <<<<<<<< HEAD 你写的代码 ...

  7. loj#2020. 「AHOI / HNOI2017」礼物

    题意:给定xy数组求 \(\sum_{i=0}^{n-1}(x_i+y_{(i+k)\modn}+c)^2\) 题解:先化简可得 \(n*c^2+2*\sum_{i=0}^{n-1}x_i-y_i+\ ...

  8. java多线程wait()方法必须放在while循环里面的原因探析

    1.写一个包子生产消费案例:一次生产或消费一个包子,有包子就消费,没有就生产.(部分代码参考传智播客刘意2015Java基础视频讲义) 1.1 写一个Baozi.class,包含main()方法,用来 ...

  9. 6月13 ThinkPHP控制器

    控制器 控制器是MVC模式中的核心,tp默认有一个Index控制器: 1.控制器的命名规则:新建一个主页面的控制器 在JiaoWu/Home/Controller下新建一个文件:MainControl ...

  10. 12. Integer to Roman C++

    直接将各个数位上每个数所代表的罗马数字表示成字符串数组,然后提取出num的各位数,将对应的string相加 class Solution { public: string intToRoman(int ...