• python解析.csv文件--csv模块(内置)


    第一part:CSV文件格式介绍


    1) CSV的含义:

    逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列.

    2)CSV的特点:
    (1)读取出的数据一般为字符类型,如果是数字需要手动转换为数字;
    (2)以行为单位读取数据;
    (3)列之间以半角逗号或制表符为分隔,一般为半角逗号;
    (4)一般为每行开头不空格,第一行是属性列,数据列之间以间隔符为间隔无空格,行之间无空行。

    3)CSV的文件内容结构:


     第二part:读取csv格式数据--reader


     操作.csv文件可以直接使用python的内置模块:csv,读数据的代码如下:

    #导包
    import csv
    #csv格式文件实际就是文本类型;读取csv文件数据
    #如果文件中存在中文的话,则必须设定其编码格式,否则得到的结果可能是乱码
    with open("data1.csv", encoding="utf-8") as fp:
    get_read_csv=csv.reader(fp,dialect="excel")
    # 返回的是get_read_csv是一个迭代器:__iter__ __next__
    print("表头的值为:",next(get_read_csv))
    #遍历表内容,输出每行的值,类型为list,可以根据需求输出需要的类型
    for value in get_read_csv:
    print("表内容为",value)

    执行结果,如下:

     从上面代码可发现,读取csv格式的数据,使用的是csv.reader()方法

    csv.reader(csvfile, dialect='excel',delimiter=' '**fmtparams):

    该函数返回一个reader对象,该对象可以迭代csv文件中的每一行,csv文件可以是任意支持iteratior协议的对象。每次调用它的__next__()方法(文件对象和列表对象都适用的方法),该对象返回一个字符串。从csv文件读取的每一行,都以列表的形式返回。
    参数解释:
    csvfile:可以是任何支持迭代器协议的对象,它每次返回一个字符串。如果它是一个文件对象,它应该以newline=''的形式打开(参照样例).
    dialect:是一个可选参数,用来定义一个仅针对特定CSV dialect的参数集。它可能是一个Dialect类的子类实例或由list_dialects()返回的多个字符串中的一个。

    delimiter:是一个可选参数,delimiter=' '表示去掉分隔符' '


    第三part:写数据到csv文件中



    import csv

    #csv文件中进行写入数据
    with open("data1.csv",mode="a") as fp:
    #创建写入对象
    writer_csv=csv.writer(fp)
    #writerow以一行的形式进行写入,传入的是一个可迭代对象
    #传入的值类型为元组
    writer_csv.writerow(("a","b","c"))
    # 传入的值类型为列表
    writer_csv.writerow([1,2,3,4,5,6])
    #传入的是值类型为字典
    writer_csv.writerow({"name": "zhangans", "age": 10})
    # 上述代码实际写入到csv文件中的是对应字典的键名,不会将值写入(因为默认操作是字典的键名),如果需要传入对应的键值的话则可以使用下面代码:
    writer_csv.writerow([value for value in {"name": "zhangsan", "age": 10}.values()])
    # 写多行:可以通过writerows方法,传入的参数是一个二维可迭代对象
    writer_csv.writerows([[1,2,3],[4,5,6]])
    执行结果,如下:
    
    
    
     
     
  • 相关阅读:
    游戏引擎服务端应该也要具备测试模块
    My Trap For C++
    unix网络编程--锁(一)
    所遇不良设计(四)
    所遇不良设计(二)
    有趣的emacs
    [Java复习]Hashcode
    [Java复习]java线程
    [Java复习]重载、覆盖、继承、多态
    折磨我两天的坑!小程序云函数调用时本地和云端测试成功,控制台接收不到正确结果
  • 原文地址:https://www.cnblogs.com/smilecindy/p/13779557.html
Copyright © 2020-2023  润新知