Python基础 - csv文件格式

python基础 - csv文件格式

csv(Comma Separated Values)格式是最通用的电子表格和数据库的导入导出格式,csv模块可以用来处理带分隔符的数据文件,是Python“功能齐备”理念的完美案例。csv模块中的reader和writer对象用来读写序列,也可以使用DictReader和DictWriter类在字典中读写数据。

  1. csv模块中定义的函数

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

​ 返回一个可以遍历csv文件的reader对象。dialect参数可以用于定义一组特定的csv方言参数,是Dialect类的子类或者list_dialects()函数返回的字符串。从csv文件读取的每一行都作为字符串列表返回。除非指定了QUOTE_NONNUMERIC格式选项(在这种情况下,未加引号的字段将转换为浮点数),否则不会执行自动的数据类型转换。

  1. Reader对象

    Reader对象包括DictReader实例和通过reader()函数获得的对象有以下通用方法:

csvreader.__next__():将读取器可迭代对象的下一行作为列表返回,根据当前方言进行解析。通常调用next(reader)。

​ Reader对象有以下通用属性:

csvreader.dialect:当前解析器使用的方言;

csvreader.line_num:从源迭代器读取的行数。这与返回的记录数不同,因为记录可以跨越多行。

csvreader.fieldnames:如果在创建对象时没有作为参数传递,则在第一次访问或从文件中读取第一个记录时初始化此属性。

  1. Writer对象

​ Writer对象包括DictWriter实例和writer()方法获得的对象有以下通用方法,对于Writer对象,一行必须是一个字符串或数字的可迭代对象,对于DictWriter对象,一行必须是一个将字段名映射到字符串或数字的字典。注意复数是用括号括起来的。

csvwriter.writerow(row):将row参数写入写入器的文件对象,根据当前方言进行格式化。

csvwriter.writerows(rows):将所有的行参数写入写入器的文件对象,并根据当前方言进行格式化。

  1. 方言和格式化参数

    Dialects支持以下属性:

Dialect.delimiter:一个用来分隔字段的单字符字符串,默认是逗号。

Dialect.doublequote:控制引号在字段中出现的实例本身如何被引用。

Dialect.escapechar:如果引号设置为QUOTE_NONE,则用于转义分隔符;如果双引号设置为False,则用于转义quotechar。

Dialect_quotechar:一个字符串,用于引用包含特殊字符的字段,如分隔符或引号,或包含换行字符。默认为“”。

  1. 案例

(1)读取一个csv文件

import csv
with open('demo.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
        
# 读取csv使用可选的格式,使用默认的utf-8编码
with open('passwd', newline='', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
    for row in reader:
        print(row) 

(2)数据写入csv文件

import csv
# 如果不指定newline='',嵌在引号字段中的换行符将无法被正确解释,并且在使用\r\n行结尾的平台上写入时会添加额外的\r。
with open('demo.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(['one, two, three'])    

(3)注册新的方言

import csv
csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE)
with open('passwd', newline='') as f:
    reader = csv.reader(f, 'unixpwd')

(4)捕获错误

import csv, sys
filename = 'demo.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))
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐江小鱼

知识创造财富,余额还是小数

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值