IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]11.1 csv--CSV文件读写库

    caimouse发表于 2016-05-22 21:50:35
    love 0

    11. 文件格式

    本库主要提供了CSV、INI、NETRC、XDR等文件格式操作。

    11.1 csv--CSV文件读写库

    本模块主要提供了对CSV文件进行操作的功能,因为CSV文件在电子表格和数据库方面都大量地使用,把它当作一种数据交换方式,比如从数据库导出生成电子表格,或者从电子表格导入到数据库。这里描述操作的CSV文件,是符合RFC 4180标准的文件格式。本CSV模块实现了对CSV文件格式进行读取和写入,换句话说,就是支持生成CSV文件然后给EXCEL进行查看,或者从EXCEL生成的CSV文件可以读取出来。csv模块提供了两个对象reader和writer,分别对应了读取和写入的功能,同时也可以使用支持字典的类DictReader和DictWriter。

     

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

    返回一个读取文件csvfile的读取对象。参数csvfile需要是一个支持迭代协议,并且每次调用__next__()方法之后返回一个字符串,比如文件对象或者列表对象都是合适的,如果csvfile是文件对象,打开时应该把newline=’’设置进去;参数dialect是用来选择支持不同CSV格式标准,默认是支持excel标准;参数fmtparams是用来指定特定的CSV格式。

    每次从读取对象返回一行csv文件的数据时,都是使用一个字符串列表来表示。

     

    csv.writer(csvfile, dialect='excel', **fmtparams)

    返回一个写入CSV文件的写入对象。参数csvfile是一个支持write()函数的对象,如果它是一个文件对象,它应该使用newline=’’参数打开;参数dialect是表示选择支持csv的标准方式;参数fmtparams是表示写入csv的特别格式。

     

    csv.register_dialect(name, [dialect, ]**fmtparams)

    注册一种新csv的格式。参数name是新格式的名称;参数dialect是一个Dialect的子类;参数fmtparams是格式参数。

     

    csv.unregister_dialect(name)

    注销一种新csv的格式。参数name是这种格式的名称。

     

    csv.get_dialect(name)

    返回名称name的注册格式。

     

    csv.list_dialects()

    返回所有注册的格式列表。

     

    csv.field_size_limit([new_limit])

    返回分析器支持最大的字段长度。如果参数new_limit有值,就是设置为最新的字段长度。

     

    class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)

    创建一个支持字典方式参数读取的csv文件对象。

     

    class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)

    创建一个支持字典方式参数写入的csv文件对象。

     

    class csv.Dialect

    创建Dialect类,包含基本csv文件的基本属性。

     

    class csv.excel

    excel类是用来支持Excel生成的CSV文件,它的名称叫做'excel'。

     

    class csv.excel_tab

    excel_tab类是用来支持tab键方式的格式的文件,它的名称叫做 'excel-tab'。

     

    class csv.unix_dialect

    unix_dialect类是适合UNIX系统下生成的CSV文件使用,它的名称叫做 'unix'。

     

    class csv.Sniffer

    Sniffer类用来推断CSV文件的格式。

     

    csv.QUOTE_ALL

    对象writer是否对字段写入双引号的标志。

     

    csv.QUOTE_MINIMAL

    对象writer是否仅对特殊标志字符串写入双引号。

     

    csv.QUOTE_NONNUMERIC

    对象writer 是否对非数字字段加双引号。

     

    csv.QUOTE_NONE

    对象writer不对任何字段进行添加双引号。

     

    exception csv.Error

    操作任何一个函数出错就会抛出此异常。

     

    为了方便对CSV文件进行格式控制,需要定义一个类来记录这些格式信息,这个类就叫做Dialect。这个类定义的方法和属性如下:

    Dialect.delimiter

    定义字段之间的分隔字符,默认是使用逗号‘,’。

     

    Dialect.doublequote

    指示如果遇到双引号的字符是否添加双引号,默认是True。

     

    Dialect.escapechar

    指示使用转义字符,默认是None,不使用转义字符。

     

    Dialect.lineterminator

    指示一行结束的字符,默认是\r\n。

     

    Dialect.quotechar

    定义使用双引号的字符,默认是“””。

     

    Dialect.quoting

    控制什么时候生成引号。默认值是QUOTE_MINIMAL。

     

    Dialect.skipinitialspace

    是否忽略分隔符之后的空格。如果设置为True就忽略,否则不忽略。默认是False。

     

    Dialect.strict

    错误的CSV文件输入时,如果本参数设置为True就抛出异常。默认是False。

     

    Reader对象

    csvreader.__next__()

    返回读取下一行数据,以列表的方式返回。

     

    csvreader.dialect

    分析器使用的CSV格式规则。

     

    csvreader.line_num

    从文件里读取多少行。

     

    csvreader.fieldnames

    从文件里读取的字段名称。

     

    Wirter对象:

    csvwriter.writerow(row)

    写一行数据到CSV文件,根据当前dialect规范进行格式化。

     

    csvwriter.writerows(rows)

    写多行数据到CSV文件,根据当前dialect规范进行格式化。

     

    csvwriter.dialect

    一个只读的dialect规范,用来格式化CSV的数据。

     

    DictWriter.writeheader()

    写一行字典的字段名称。

     

    生成CSV文件的例子:

    #python 3.4

    import csv

     

    with open('test.csv', 'w', newline='') as fp:

        a = csv.writer(fp, delimiter=',')

        data = [['Me', 'You'],

                ['293', '219'],

                ['54', '13']]

        a.writerows(data)

     

    读取CSV文件的例子:

    #python 3.4

    import csv, sys

     

    filename = 'test.csv'

    with open(filename, newline='') as f:

        reader = csv.reader(f)

        try:

            for row in reader:

                print(row)

        except csv.Error as e:

            sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))

    结果输出如下:

    ['Me', 'You']

    ['293', '219']

    ['54', '13']

     

    蔡军生  QQ:9073204  深圳



沪ICP备19023445号-2号
友情链接