python3从零学习-5.5.1、CSV 文件读写

78 篇文章 1 订阅
78 篇文章 0 订阅
源代码:  Lib/csv.py

模块内容
csv  模块定义了以下函数:
  • csv.reader(csvfile, dialect='excel', **fmtparams)

返回一个 reader 对象,该对象将逐行遍历  csvfile csvfile  可以是任何对象,只要这个对象支持  iterator  协议并在每次调用  __next__()  方法时都返回字符串, 文件对象  和列表对象均适用。如果  csvfile  是文件对象,则打开它时应使用  newline='' 。  1  可选参数  dialect  是用于不同的 CSV 方言的特定参数组。它可以是  Dialect  类的子类的实例,也可以是  list_dialects()  函数返回的字符串之一。另一个可选关键字参数  fmtparams  可以覆写当前方言格式中的单个格式设置。有关方言和格式设置参数的完整详细信息,请参见  变种与格式参数  部分。
csv 文件的每一行都读取为一个由字符串组成的列表。除非指定了  QUOTE_NONNUMERIC  格式选项(在这种情况下,未引用的字段会转换为浮点数),否则不会执行自动数据类型转换。
一个简短的用法示例:
>>> import csv
>>> with open ( 'eggs.csv' , newline = '' ) as csvfile:
...     spamreader = csv . reader(csvfile, delimiter = ' ' , quotechar = '|' )
...     for row in spamreader:
...         print ( ', ' . join(row))
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam
  • csv.writer(csvfile, dialect='excel', **fmtparams)

返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。 csvfile  可以是具有  write()  方法的任何对象。如果  csvfile  是文件对象,则打开它时应使用  newline='' 。  1  可选参数  dialect  是用于不同的 CSV 方言的特定参数组。它可以是  Dialect  类的子类的实例,也可以是  list_dialects()  函数返回的字符串之一。另一个可选关键字参数  fmtparams  可以覆写当前方言格式中的单个格式设置。有关方言和格式设置参数的完整详细信息,请参见  变种与格式参数  部分。为了尽量简化与数据库 API 模块之间的对接, None  值会写入为空字符串。虽然这个转换是不可逆的,但它让 SQL 空数据值转储到 CSV 文件更容易,而无需预处理从  cursor.fetch*  调用返回的数据。写入前,所有非字符串数据都先用  str()  转化为字符串再写入。
一个简短的用法示例:
import csv
with open ( 'eggs.csv' , 'w' , newline = '' ) as csvfile:
    spamwriter = csv . writer(csvfile, delimiter = ' ' ,
                            quotechar = '|' , quoting = csv . QUOTE_MINIMAL)
    spamwriter . writerow([ 'Spam' ] * 5 + [ 'Baked Beans' ])
    spamwriter . writerow([ 'Spam' , 'Lovely Spam' , 'Wonderful Spam' ])
  • csv.register_dialect(name[, dialect[, **fmtparams]])

将  name  与  dialect  关联起来。 name  必须是字符串。要指定变种 (dialect),可以给出  Dialect  的子类,或给出  fmtparams  关键字参数,或两者都给出,此时关键字参数会覆盖  dialect  参数。 有关变种和格式设置参数的完整详细信息,请参见  变种与格式参数  部分。
  • csv.unregister_dialect(name)

从变种注册表中删除  name  对应的变种。如果  name  不是已注册的变种名称,则抛出  Error  异常。
  • csv.get_dialect(name)

返回  name  对应的变种。如果  name  不是已注册的变种名称,则抛出  Error  异常。该函数返回的是不可变的  Dialect  对象。
  • csv.list_dialects()

返回所有已注册变种的名称。
  • csv.field_size_limit([new_limit])

返回解析器当前允许的最大字段大小。如果指定了  new_limit ,则它将成为新的最大字段大小。
 
csv 模块定义了以下类:

class csv.DictReader(ffieldnames=Nonerestkey=Nonerestval=Nonedialect='excel'*args**kwds)

创建一个对象,其操作类似于常规 reader 但会将每行中的信息映射到一个  OrderedDict ,其中的键由可选的  fieldnames  形参给出。
fieldnames  形参是一个  sequence 。 如果省略  fieldnames ,则文件  f  第一行中的值将被用作字段名。 无论字段名是如何确定的,有序字典都将保留其原始顺序。
If a row has more fields than fieldnames, the remaining data is put in a list and stored with the fieldname specified by  restkey  (which defaults to  None ). If a non-blank row has fewer fields than fieldnames, the missing values are filled-in with  None .
所有其他可选或关键字参数都传递给底层的  reader  实例。
在 3.6 版更改:  返回的行现在的类型是  OrderedDict
一个简短的用法示例:
>>> import csv
>>> with open ( 'names.csv' , newline = '' ) as csvfile:
...     reader = csv . DictReader(csvfile)
...     for row in reader:
...         print (row[ 'first_name' ], row[ 'last_name' ])
...
Eric Idle
John Cleese
 
>>> print (row)
OrderedDict([('first_name', 'John'), ('last_name', 'Cleese')])
 

class csv.DictWriter(ffieldnamesrestval=''extrasaction='raise'dialect='excel'*args**kwds)

创建一个对象,该对象在操作上类似常规 writer,但能将字典映射到输出行。 fieldnames  参数是由 key(键)组成的  序列 ,用于指定字典中的 value (值)的顺序,这些值会按指定顺序传递给  writerow()  方法并写入  f  文件。如果字典缺少  fieldnames  中的键,则可选参数  restval  用于指定要写入的值。如果传递给  writerow()  方法的字典的某些键在  fieldnames  中找不到,则可选参数  extrasaction  用于指定要执行的操作。如果将其设置为  'raise'  (默认值),则会引发  ValueError 。 如果将其设置为  'ignore' ,则字典中的其他键值将被忽略。 所有其他可选或关键字参数都传递给底层的  writer  实例。
Note that unlike the  DictReader  class, the  fieldnames  parameter of the  DictWriter  is not optional. Since Python’s  dict  objects are not ordered, there is not enough information available to deduce the order in which the row should be written to file  f .
一个简短的用法示例:
import csv
 
with open ( 'names.csv' , 'w' , newline = '' ) as csvfile:
    fieldnames = [ 'first_name' , 'last_name' ]
    writer = csv . DictWriter(csvfile, fieldnames = fieldnames)
 
    writer . writeheader()
    writer . writerow({ 'first_name' : 'Baked' , 'last_name' : 'Beans' })
    writer . writerow({ 'first_name' : 'Lovely' , 'last_name' : 'Spam' })
    writer . writerow({ 'first_name' : 'Wonderful' , 'last_name' : 'Spam' })
  • class csv.Dialect

Dialect  类是主要依赖于其属性的容器类,用于将定义好的参数传递给特定的  reader  或  writer  实例。
  • class csv.excel

excel  类定义了 Excel 生成的 CSV 文件的常规属性。它在变种注册表中的名称是  'excel'
  • class csv.excel_tab

excel_tab  类定义了 Excel 生成的、制表符分隔的 CSV 文件的常规属性。它在变种注册表中的名称是  'excel-tab'
  • class csv.unix_dialect

unix_dialect  类定义了在 UNIX 系统上生成的 CSV 文件的常规属性,即使用  '\n'  作为换行符,且所有字段都有引号包围。它在变种注册表中的名称是  'unix'
3.2 新版功能.
  • class csv.Sniffer

Sniffer  类用于推断 CSV 文件的格式。
Sniffer  类提供了两个方法:

sniff(sampledelimiters=None)

分析给定的  sample  并返回一个  Dialect  子类,该子类中包含了分析出的格式参数。如果给出可选的  delimiters  参数,则该参数会被解释为字符串,该字符串包含了可能的有效分隔符。

has_header(sample)

分析示例文本(假定为 CSV 格式),如果第一行很可能是一系列列标题,则返回  True
使用  Sniffer  的示例:
with open ( 'example.csv' , newline = '' ) as csvfile:
    dialect = csv . Sniffer() . sniff(csvfile . read( 1024 ))
    csvfile . seek( 0 )
    reader = csv . reader(csvfile, dialect)
    # ... process CSV file contents here ...
 
csv  模块定义了以下常量:
  • csv.QUOTE_ALL

指示  writer  对象给所有字段加上引号。
  • csv.QUOTE_MINIMAL

指示  writer  对象仅为包含特殊字符(例如  定界符 引号字符  或  行结束符  中的任何字符)的字段加上引号。
  • csv.QUOTE_NONNUMERIC

指示  writer  对象为所有非数字字段加上引号。
指示 reader 将所有未用引号引出的字段转换为  float  类型。
  • csv.QUOTE_NONE

指示  writer  对象不使用引号引出字段。当  定界符  出现在输出数据中时,其前面应该有  转义符 。如果未设置  转义符 ,则遇到任何需要转义的字符时,writer 都会抛出  Error  异常。
指示  reader  不对引号字符进行特殊处理。
csv  模块定义了以下异常:

exception csv.Error

该异常可能由任何发生错误的函数抛出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值