zl程序教程

您现在的位置是:首页 >  其他

当前栏目

11.1 csv--CSV文件读写库

文件 -- 读写 csv
2023-09-14 09:10:35 时间

11. 文件格式

本库主要提供了CSVININETRCXDR等文件格式操作。

11.1 csv--CSV文件读写库

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

 

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  深圳