#!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. zabbix自定义监控方式

  2. Getting Started with Processing 第四章总结

    为什么要使用变量: 我们使用变量的一个重要原因就是避免变成过程中的重复工作,如果你重复使用某一个数字超过了一次,就可以考虑使用一个变量来代替它,这样你的程序会更加通用并且易于更新. 定义变量 定义变量 ...

  3. 使用validate()方法进行输入校验 --Struts2框架

    服务器端的输入校验包含两种方式:硬编码方式和配置文件方式.本文演示硬编码方式中使用validate()方法进行输入校验. 1.项目目录结构: 2.项目核心代码: BookAction.java: pu ...

  4. MP4介绍与基本AVC编码(x264)教程

    MP4介绍与基本AVC编码(x264)教程(最后更新: 2006.03.25)为日益增加的对MP4 H264/AVC编码的需求,本人做了一个简单的MP4介绍与基本AVC编码(使用x264)教程最后更新 ...

  5. Exception:public class feign.codec.EncodeException feign.codec.EncodeException: 'Content-Type' cannot contain wildcard type '*'

    一.异常出现的场景  Spring Cloud 服务A通过feign调用服务B;之前是好好的,但今天突然就不好了,抛以下异常===> 出现原因补充,Spring Boot默认的JSON方式 Ja ...

  6. 并查集-解决区间和纠错问题 hdu-3038

    题目:多次给出信息,告诉你[a,b]区间的和,求多少个错误信息(错误信息不考虑). 乍一看有点像线段树,但想想就发现这个并不能用线段树方便地解决.后来经提醒是并查集的一种经典题型. 把区间抽象为并查集 ...

  7. 01Flask基础

    简介 Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核,其他几乎所有的 ...

  8. hihocoder 1513 小Hi的烦恼 (bitset优化)

    大意: n个人, 5门课, 给定每个人每门课的排名, 对于每个人输出有多少人5门课都比他差. 明显是个5维偏序问题, 题目有保证排名均不同, 可以用bitset优化为$O(\frac{n^2}{\om ...

  9. python记录_day01 初始

    一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum),人称龟叔.目前python主要应用于web开发.云计算.科学计算.人工智能.系统运维.金融.图形GUI等 ...

  10. MVC实战之排球计分(二)—— 构架概要设计

    本程序主要基于MVC4框架,使应用程序的输入,处理和输出强制性分开,使得软件可维护性,可扩展性,灵活性以及封装性得到提高, MVC应用程序分为三个核心部件:Model,View, Controller ...