#!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. Java的三种代理模式(Proxy,CGLib)

    1.静态代理,这种不用说最不靠谱.每个类一个代理,代码量很大. 2.JDK代理.使用java.lang.reflect.Proxy进行代理,但是被代理的类必须要实现接口. 3.Cglib代理.不用实现 ...

  2. linux bash基本特性

    一.bash 基础特性 (1)命令历史的功能 history: 环境变量 HISTSIZE:命令历史记录的条数 HISTFILE: ~/.bash_history 每个用户都有自己独立的命令历史文件 ...

  3. linux搭建DHCP

    动态主机配置协议(DHCP,Dynamic Host Configuration Protocol),该协议用于自动管理局域网内主机的IP地址.子网掩码.网关地址及DNS地址等参数,可以有效地提升IP ...

  4. vue核心之虚拟DOM

    一.前言 虚拟DOM概念随着react的诞生而诞生,由facebook提出,其卓越的性能很快得到广大开发者的认可:继react之后vue2.0也在其核心引入了虚拟DOM的概念,本文将以vue2.0使用 ...

  5. 【洛谷p2669】【一本通p1100】金币

    (今天高产) 金币[传送门] 洛谷上的算法标签 自我感觉主要靠循环 这道题是2015年NOIp普及组的题,其实还是很简单的.但为什么写这道题呢? 这道题第一次接触是在一本通刷题的时候,当时学循环结构, ...

  6. python基础之 026 包以及包的引入

    内容梗概: 1. from xxx import xxx知识点补充 2. 包 1. 知识点补充. 我们现在知道可以使⽤用import和from xxx import xxx来导入一个模块中的内容.那有 ...

  7. python基础之变量以及if语句

    1.变量 1.1定义:变量是一种介质,是将一些值暂时存储在内存中,方便后续程序调用.可将其看作容器但其内部的东西是可变化的. 1.2 变量的命名规则: 1.变量的命名只能由数字,字母,下划线构成. 2 ...

  8. 牛客挑战赛 30 A 小G数数

    题目链接:https://ac.nowcoder.com/acm/contest/375/A 分析:我写的时候竟然把它当成了DP....... 还建了个结构体DP数组,保存一二位,不知道当时脑子在抽啥 ...

  9. bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 后缀自动机在tire树上拓展

    题意:有棵树每个点有个颜色(不超过10种),每个节点不超过20个儿子,问你每两点之间的颜色序列不同的有多少种 题解:先建出树,对于每个叶子节点,bfs一遍建在sam上,每次保留当前点在sam上的位置, ...

  10. java XML(可扩展标记语言)

    XML 是EXtensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言,传输数据而不是显示数据,可以自定义标签,具有自我描述性是一种通用的数据交换格 ...