zoukankan      html  css  js  c++  java
  • csv,json格式数据的读写

    #!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:workoutput.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=' ',lineterminataor=' '

    outputFile=open('e:workoutput.csv','w',newline='') #经测试,设置换行符lineterminator和newline=''会使换行符消失

    outputWriter=csv.writer(outputFile,delimiter=' ',lineterminator=' ')

    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()函数是定义得非常好的接口的典范。当我们使用时,只需传入一个必须的参数。但是,当默认的序列化或反序列机制不满足我们的要求

    时,又可以传入更多的参数来定制序列化或反序列化的规则,既做到了接口简单易用,又做到了充分的扩展性和灵活性。

    '''

  • 相关阅读:
    2.8 Classes of Restricted Estimators
    navicat远程登录windows服务器
    面试题
    【南阳OJ分类之语言入门】80题题目+AC代码汇总
    基于‘BOSS直聘招聘信息’分析企业到底需要什么样的PHPer
    数据开源
    Pyhton爬虫实战
    Python爬虫框架Scrapy实战
    做网站用UTF-8编码还是GB2312编码?
    【南阳OJ分类之大数问题】题目+AC代码汇总
  • 原文地址:https://www.cnblogs.com/Ting-light/p/9548257.html
Copyright © 2011-2022 走看看