2020-04-05

Csv-CSV 文件读写?
版本 2 中的新功能。3.所谓的 CSV (逗号分隔值) 格式是最常见的导入和 电子表格和数据库的导出格式。没有 “CSV 标准”,所以 该格式由许多读取和 写下来。缺乏标准意味着微妙的差异往往存在于 不同应用程序产生和消耗的数据。这些差异可以 让处理来自多个来源的 CSV 文件变得烦人。然而,当 分隔符和引用字符各不相同,整体格式足够相似 可以编写一个可以有效操作的模块 这些数据隐藏细节读写数据 程序员。的Csv模块实现了在 CSV 中读写表格数据的类 格式。它允许程序员说,“以首选的格式编写这些数据 通过 Excel,”或“ 从 Excel 生成的文件中读取数据 ”,而不 了解 Excel 使用的 CSV 格式的精确细节。程序员可以 还描述其他应用程序理解的 CSV 格式或定义其 自己的专用 CSV 格式。的Csv模块的读者和作家对象读取和 写入序列。程序员也可以以字典的形式读写数据 使用DictReader和DictWriter类。注意 这个版本的Csv模块不支持 Unicode 输入。还有, 目前有一些关于 ASCII NUL 字符的问题。因此, 为安全起见,所有输入应 UTF-8 或可打印 ASCII;请参见中的示例 型材例子.另请参阅PEP 305-CSV 文件 APIPython 增强提案提出了对 Python 的这一补充。13.1。1。 模块内容的Csv模块定义以下功能:Csv。读者(Csvfile, 方言 = ‘优秀’, * * Fmtparams)返回一个读取器对象,该对象将遍历给定的行Csvfile. Csvfile可以是任何对象支持迭代器协议并返回 每次字符串下一个 ()方法被调用-文件对象和列表 对象都是合适的。如果Csvfile是文件对象,必须打开它 平台上的 “b” 标志有所不同。可选的 方言参数可用于定义一组参数 特定于特定的 CSV 方言。可能子类的实例的 的方言类或由返回的字符串之一 列表 _ 方言 ()功能。另一个可选的Fmtparams关键字参数 可以给定以覆盖当前中的单个格式设置参数 方言。有关方言和格式设置参数的完整详细信息,请参见 型材方言和格式参数.从 csv 文件读取的每一行都作为字符串列表返回。无 自动进行数据类型转换。一个简短的使用示例:>进口 Csv>带 打开(鸡蛋。Csv’, ‘Rb’) 作为 Csvfile:… Spamreader = Csv.读者(Csvfile, 分隔符=’’, Quotechar=’|’)… 用 行 在 Spamreader:… 打印 ‘,’.加入(行)垃圾邮件,烤豆垃圾邮件,可爱的垃圾邮件,精彩的垃圾邮件在版本 2 中更改。5:解析器现在对多行引号字段更加严格。以前, 如果一行在带引号的字段中结束,而没有终止换行符,则 换行符将被插入到返回的字段中。这种行为导致了问题 读取字段中包含回车符的文件时。 行为被更改为返回字段而不插入换行符。作为一个 结果,如果嵌入字段中的换行符很重要,输入应该 以保留换行符的方式分成行。Csv。作家(Csvfile, 方言 = ‘优秀’, * * Fmtparams)返回一个写入器对象,负责将用户的数据转换为分隔的 给定类似文件的对象上的字符串。 Csvfile可以是具有 写 ()方法。如果Csvfile是文件对象,必须使用 平台上的 “b” 标志有所不同。可选的方言 参数可用于定义一组特定于 特定的 CSV 方言。可能子类的实例的 方言类或由返回的字符串之一 列表 _ 方言 ()功能。另一个可选的Fmtparams关键字参数 可以给定以覆盖当前中的单个格式设置参数 方言。有关方言和格式设置参数的完整详细信息,请参见 型材方言和格式参数.做到这一点 尽可能容易地与实现 DB API 的模块接口, 阀门没有以空字符串形式写入。虽然这不是 可逆转换,它使 SQL NULL 数据值更容易转储到 CSV 文件没有预处理从光标。提取 打电话。 浮动是用字符串表示的Repr ()在被写之前。 所有其他非字符串数据都被字符串化Str ()在被写之前。一个简短的使用示例:进口 Csv带 打开(鸡蛋。Csv’, ‘Wb’) 作为 Csvfile: Spamwriter = Csv.作家(Csvfile, 分隔符=’’, Quotechar=’|’, 引用=Csv.QUOTE_MINIMAL) Spamwriter.Writerow([‘Spam’] * 5 + [‘烤豆子’]) Spamwriter.Writerow([‘Spam’, 可爱的垃圾邮件, 精彩垃圾邮件])Csv。Register_dialect(名称, [方言, ] * Fmtparams)关联方言带名称. 名称必须是字符串或 Unicode 对象。的 方言可以通过传递的子类来指定方言,或 通过Fmtparams关键字参数,或两者都有,关键字参数覆盖 方言参数。有关方言和格式的完整详细信息 参数,请参阅部分方言和格式参数.Csv。Unregister_dialect(名称)删除与关联的方言名称从方言登记处。一个 错误如果名称不是注册的方言名称。Csv。Get_dialect(名称)返回与之相关的方言名称.一个错误如果名称 不是注册的方言名称。在版本 2 中更改。5:此函数现在返回一个不可变的方言.以前是 返回了所请求的方言的实例。用户可以修改 底层类,改变活跃读者和作者的行为。Csv。List_dialects()返回所有注册方言的名称。Csv。Field_size_limit([New_limit])返回解析器允许的当前最大字段大小。如果New_limit是 鉴于此,这将成为新的限制。版本 2 中的新功能。5.的Csv模块定义以下类:类Csv。DictReader(F, 字段名称 = 无, Restkey = 无, Restval = 无, 方言 = ‘优秀’, * Args, * * Kwds)创建一个像普通阅读器一样运行的对象,但映射 读取到字典中的信息,其键由可选的 字段名参数。的字段名参数是一个序列其元素与 按顺序输入数据的字段。这些元素的钥匙 生成的字典。如果字段名参数被省略,值 在文件的第一行F将用作字段名。如果 行读取的字段比字段名序列多,其余数据为 添加为由值键入的序列Restkey.如果读取的行具有 字段比字段名序列少,其余键取值 可选的Restval参数。任何其他可选或关键字 参数被传递给底层读者实例。一个简短的使用示例:>进口 Csv>带 打开(姓名。Csv’) 作为 Csvfile:… 读者 = Csv.DictReader(Csvfile)… 用 行 在 读者:… 打印(行[‘First_name’], 行[‘Last _ name’])…烤豆可爱的垃圾邮件精彩的垃圾邮件类Csv。DictWriter(F, 字段名, Restval = ‘’, 额外操作 = “存在”, 方言 = ‘优秀’, * Args, * * Kwds)创建一个像普通编写器一样操作但映射字典的对象 输出行。的字段名参数是一个序列标识顺序的键 字典中的哪些值传递给Writerow ()方法是 写入文件F.可选的Restval参数指定 如果字典中缺少一个键,则要写入的值字段名.如果 字典传递给Writerow ()方法包含一个键 not 发现于字段名,可选Extrasaction参数指示什么 要采取的行动。如果设置为“Raise”AValueError提高了。 如果设置为“忽略”,字典中的额外值将被忽略。 任何其他可选参数或关键字参数都将传递给基础 作家实例。请注意,与DictReader类,字段名参数 的DictWriter不是可选的。自从 Python 的字典 对象没有排序,没有足够的信息可以推断 顺序排应写入文件F.一个简短的使用示例:进口 Csv带 打开(姓名。Csv’, W) 作为 Csvfile: 字段名 = [‘First_name’, ‘Last _ name’] 作家 = Csv.DictWriter(Csvfile, 字段名=字段名) 作家.Writeheader() 作家.Writerow({‘First_name’: 烘焙, ‘Last _ name’: “豆}) 作家.Writerow({‘First_name’: ‘Lovely’, ‘Last _ name’: ‘Spam’}) 作家.Writerow({‘First_name’: ‘Wonderful’, ‘Last _ name’: ‘Spam’})类Csv。方言的方言类是主要依赖于其的容器类。 属性,用于定义特定的参数 读者或作家实例。类Csv。Excel的Excel类定义 Excel 生成的 CSV 的常用属性 文件。它注册了方言名称’Excel’.类Csv。Excel_tab的Excel_tab类定义 Excel 生成的常用属性 制表符分隔的文件。它注册了方言名称’Excel-tab’.类Csv。嗅探器的嗅探器类用于推断 CSV 文件的格式。的嗅探器类提供了两种方法:嗅(样本, 分隔符 = 无)分析给定的样本并返回方言子类 反映找到的参数。如果可选分隔符参数 在给定的情况下,它被解释为包含可能有效的字符串 分隔符字符。Has_header(样本)分析示例文本 (假定为 CSV 格式) 并返回 真正如果第一行似乎是一系列列标题。的示例嗅探器使用:带 打开(例如。Csv’, ‘Rb’) 作为 Csvfile: 方言 = Csv.嗅探器().嗅(Csvfile.阅读(1024)) Csvfile.寻求(0) 读者 = Csv.读者(Csvfile, 方言) #.在此处处理 CSV 文件内容.的Csv模块定义以下常量:Csv。QUOTE_ALL指示作家引用所有字段的对象。Csv。QUOTE_MINIMAL指示作家仅引用包含的字段的对象 特殊字符,如分隔符, Quotechar或中的任何字符 Lineterminator.Csv。QUOTE_NONNUMERIC指示作家引用所有非数字字段的对象。指示读取器将所有未加引号的字段转换为类型浮动.Csv。QUOTE_NONE指示作家从不引用字段的对象。当电流 分隔符发生在输出数据中,它前面是当前Escapechar 性格。如果Escapechar未设置,作者将提高错误如果 遇到任何需要转义的字符。指示读者不执行引号字符的特殊处理。的Csv模块定义了以下异常:异常Csv。错误当检测到错误时,由任何函数引发。13.1。2. 方言和格式参数为了更容易指定输入和输出记录的格式,具体 格式参数被组合成方言。方言是 的子类方言类有一组特定的方法和一个 单验证 ()方法。创建时读者或 作家对象,程序员可以指定一个字符串或 的方言类作为方言参数。除了,或者相反 的,方言参数,程序员也可以指定个人 格式化参数,其名称与下面定义的属性相同 对于方言班级。方言支持以下属性:方言。分隔符用于分隔字段的单字符字符串。它默认为’,’.方言。Doublequote控制实例的方式Quotechar出现在字段中应该 他们自己被引用。当真正,字符加倍。当 假,Escapechar作为前缀Quotechar.它 默认为真正.输出时,如果Doublequote是假没有Escapechar设置, 错误如果 aQuotechar在字段中找到。方言。Escapechar一个由编写者使用的单字符字符串来转义分隔符如果引用 设置为QUOTE_NONE和Quotechar如果Doublequote是 假.在阅读时,Escapechar删除任何特殊含义 以下字符。它默认为没有,禁止逃跑。方言。Lineterminator字符串用于终止线产生作家.它默认 转’\ R \ n’.注意 的读者硬编码为见过’\ R’或’\ N’作为 行尾,并忽略Lineterminator.此行为可能会在 未来。方言。Quotechar用于引用包含特殊字符的字段的单字符字符串,例如 作为分隔符或Quotechar,或包含新行字符的字符。它 默认为’"’.方言。引用控制何时由编写器生成并由 读者。它可以承担任何报价 _ *常量 (请参阅部分 模块内容),默认为QUOTE_MINIMAL.方言。Skipinitialspace当真正,空格紧接着分隔符被忽略。 默认值为假.方言。严格当真正,引发异常错误错误的 CSV 输入。 默认值为假.13.1。3. 读取器对象读取器对象 (DictReader由返回的实例和对象 读者 ()函数) 具有以下公共方法:Csvreader。下一个()返回读取器的可迭代对象的下一行作为列表,根据 到现在的方言。读取器对象具有以下公共属性:Csvreader。方言解析器使用的方言的只读描述。Csvreader。Line_num从源迭代器读取的行数。这是不一样的 返回的记录数,因为记录可以跨越多行。版本 2 中的新功能。5.DictReader 对象具有以下公共属性:Csvreader。字段名如果在创建对象时未作为参数传递,则此属性为 初始化在第一次打开或当第一个记录读取 文件。在版本 2 中更改。6.13.1。4. 编写器对象作家对象 (DictWriter返回的实例和对象 的作家 ()函数) 具有以下公共方法。A行必须是 的字符串或数字序列作家对象和字典 将字段名称映射到字符串或数字 (通过传递它们Str () 首先)DictWriter对象。请注意,复数是写的 被 parens 包围。这可能会导致其他程序的一些问题 读取 CSV 文件 (假设它们完全支持复数)。Csvwriter。Writerow(行)写下行编写器文件对象的参数,根据 当前的方言。Csvwriter。Writerows(行)将所有元素写入行(可迭代的行描述的对象 上面) 到编写器的文件对象,根据当前格式化 方言。编写器对象具有以下公共属性:Csvwriter。方言作者使用的方言的只读描述。DictWriter 对象具有以下公共方法:双簧管。Writeheader()用字段名写一行 (如构造函数中指定的)。版本 2 中的新功能。7.13.1。5. 例子读取 CSV 文件的最简单示例:进口 Csv带 打开(一些。Csv’, ‘Rb’) 作为 F: 读者 = Csv.读者(F) 用 行 在 读者: 打印 行读取具有替代格式的文件:进口 Csv带 打开(Passwd, ‘Rb’) 作为 F: 读者 = Csv.读者(F, 分隔符=’:’, 引用=Csv.QUOTE_NONE) 用 行 在 读者: 打印 行相应的最简单的可能的写作示例是:进口 Csv带 打开(一些。Csv’, ‘Wb’) 作为 F: 作家 = Csv.作家(F) 作家.Writerows(Someiterable)注册新方言:进口 CsvCsv.Register_dialect(‘Unixpwd’, 分隔符=’:’, 引用=Csv.QUOTE_NONE)带 打开(Passwd, ‘Rb’) 作为 F: 读者 = Csv.读者(F, ‘Unixpwd’)读者捕获和报告错误的更高级的使用:进口 Csv, 系统文件名 = 一些。Csv’带 打开(文件名, ‘Rb’) 作为 F: 读者 = Csv.读者(F) 尝试: 用 行 在 读者: 打印 行 除了 Csv.错误 作为 E: 系统.出口(文件% S,线% D: % S’ % (文件名, 读者.Line_num, E))虽然模块不直接支持解析字符串,但它可以很容易地 完成:进口 Csv用 行 在 Csv.读者([“一,二,三”]): 打印 行的Csv模块不直接支持读写 Unicode,但是 它是 8 位干净的,除了 ASCII NUL 字符的一些问题。所以你可以 为您编写处理编码和解码的函数或类 避免使用 null 的 UTF-16 等编码。建议 UTF-8。Unicode_csv_reader ()下面是一个发电机包装Csv.阅读器 处理 Unicode CSV 数据 (Unicode 字符串列表)。 Utf_8 _ 编码器 () 是一个发电机将 Unicode 字符串编码为 UTF-8,一个字符串 (或行) 在 一次。编码的字符串由 CSV 读取器解析,并且 Unicode_csv_reader ()将 UTF-8-encoded 单元格解码回 Unicode:进口 CsvDef Unicode_csv_reader(Unicode_csv_data, 方言=Csv.Excel, * *Kwargs): # Csv。Py 不执行 Unicode;暂时编码为 UTF-8: Csv_reader = Csv.读者(Utf_8_encoder(Unicode_csv_data), 方言=方言, * *Kwargs) 用 行 在 Csv_reader: # 解码 UTF-8 返回 Unicode,逐个单元格: 产量 [Unicode(电池, ‘Utf-8’) 用 电池 在 行]Def Utf_8_encoder(Unicode_csv_data): 用 线 在 Unicode_csv_data: 产量 线.编码(‘Utf-8’)对于所有其他编码,以下UnicodeReader和 UnicodeWriter可以使用类。他们需要额外的编码 参数在他们的构造函数中,并确保数据传递真实的 读取器或写入器编码为 UTF-8:进口 Csv, 编解码器, CStringIO类 UTF8Recoder: “迭代器,它读取已编码的流并将输入重新编码到 UTF-8” Def _ _ Init _ _(自, F, 编码): 自.读者 = 编解码器.Getreader(编码) (F) Def _ _ Iter _ _(自): 返回 自 Def 下一个(自): 返回 自.读者.下一个().编码(“Utf-8”)类 UnicodeReader: “一个 CSV 读取器,它将遍历 CSV 文件 “f” 中的行,在给定的编码中编码。” Def _ _ Init _ _(自, F, 方言=Csv.Excel, 编码=“Utf-8”, * *Kwds): F = UTF8Recoder(F, 编码) 自.读者 = Csv.读者(F, 方言=方言, * *Kwds) Def 下一个(自): 行 = 自.读者.下一个() 返回 [Unicode(S, “Utf-8”) 用 S 在 行] Def _ _ Iter _ _(自): 返回 自类 UnicodeWriter: “将行写入 CSV 文件 “f” 的 CSV 编写器,在给定的编码中编码。” Def _ _ Init _ _(自, F, 方言=Csv.Excel, 编码=“Utf-8”, * *Kwds): # 将输出重定向到队列 自.队列 = CStringIO.StringIO() 自.作家 = Csv.作家(自.队列, 方言=方言, * *Kwds) 自.流 = F 自.编码器 = 编解码器.Getincrementalencoder(编码)() Def Writerow(自, 行): 自.作家.Writerow([S.编码(“Utf-8”) 用 S 在 行]) # 从队列中获取 UTF-8 输出. 数据 = 自.队列.Getvalue() 数据 = 数据.解码(“Utf-8”) #.并将其重新编码为目标编码 数据 = 自.编码器.编码(数据) # 写入目标流 自.流.写(数据) # 空队列 自.队列.截断(0) Def Writerows(自, 行): 用 行 在 行: 自.Writerow(行)目录13.1。 Csv-CSV 文件读写13.1。1。模块内容13.1。2.方言和格式参数13.1。3.读取器对象13.1。4.编写器对象13.1。5.例子上一个主题13. 文件格式下一个主题13.2. ConfigParser-配置文件解析器本页显示来源快速搜索Go«指数模块 |下一个 |以前 | Python» 文档» Python 标准库» 13. 文件格式»

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值