11. 文件格式
本库主要提供了CSV、INI、NETRC、XDR等文件格式操作。
本模块主要提供了对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 深圳