Python中CSV文件的读写库 用python读写和处理csv文件

   2023-02-09 学习力0
核心提示:目录文件的基本读写用字典模式处理数据非标准格式的处理dialectSnifferCSV 格式的全称是 Comma Separated Values,意思是逗号分割的数据,是最常见的电子表格和数据库的导出格式之一,在 RFC 4180 中已经成为了一种标准格式。Python 中提供了一个官方的标准

CSV 格式的全称是 Comma Separated Values,意思是逗号分割的数据,是最常见的电子表格和数据库的导出格式之一,在 RFC 4180 中已经成为了一种标准格式。Python 中提供了一个官方的标准库来处理这种文件类型,那就是 CSV 库。

官方文档在此:CSV

文件的基本读写

文件的读写主要使用 csv.reader 和 csv.writer 来完成,它的定义如下:

csv.reader(csvfile, dialect='excel', **fmtparams)
  • csvfile:返回字符串的迭代器,一般是 open 函数返回的文件对象
  • dialect:用来读取非标准 csv 格式的指定参数,这部分参考下文
  • **fmtparams:用来指定格式的参数,这部分的详细参数参考下文

最简单、最常用的使用方法是将 open 函数返回的文件对象直接丢给 csv.reader 就会得到一个每次返回一个拆分后的字符串列表的迭代器:

import csv
with open('file.csv', 'r') as input_file:
    file_content = csv.reader(input_file, delemiter=',')
    for row in file_content:
        # code here
        pass

类似地,对文件的写操作与原生方法类似:

import csv
with open('file.csv', 'w', newline='') as output_file:
    file_writer = csv.writer(output_file, delimiter=',')
    file_writer.writerow(['Spam'] * 5 + ['Baked Beans'])
    file_writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

用字典模式处理数据

有时候,我们可能需要将数据读取成字典(例如要上传到 MongoDB 的时候),这时候我们可以使用 csv.DictReader 将表格形式的数据读取为字典形式的数据

这个函数的参数如下:

csv.DictReader(
    f,
    fieldnames=None,
    restkey=None, restval=None,
    dialect='excel',
    *args, **kwds
)
  • f:可迭代对象或者文件对象
  • fieldnames:一个有序列表,代表字典中的字段(一般是文件的列名),如果不指定,就用文件的第一行的字符串来作为字段的名字
  • restkey:如果列名的数量少于内容的列数,那么剩下的列就会被统一放到一个字段里,这里的 restkey 就是这个字段的名字,默认为 None
  • restval:与 restkey 类似,如果内容的列数少于列名的数量,那么内容中缺少的列就会被填充,这个参数指定用来填充的值,默认为 None
  • 其他的参数与 csv.reader 相同

一个简单的示例如下:

import csv
with open('file.csv') as input_file:
    reader = csv.DictReader(input_file)
    for row in reader:
        print(row['first_name'], row['last_name'])

# Eric Idle
# John Cleese

print(row)
# {'first_name': 'John', 'last_name': 'Cleese'}

类似地,字典的写通过 csv.DictWriter 来完成,这个函数将字典类型的数据输出为表格形式的数据csv.DictWriter 的参数如下:

csv.DictWriter(
    f,
    fieldnames,
    restval='', extrasaction='raise',
    dialect='excel',
    *args, **kwds
)

与 csv.DictWriter 类似,fieldnames 指定所有的字段名称,restval 用来指定当指定字段有缺失值的时候用来填充的内容,extrasaction 参数用来指定内容缺少字段时的操作,默认会 'raise',即引发一个 ValueError 异常,可以设置为 'ignore',对应着忽略额外值,一个示例如下:

import csv

with open('names.csv', 'w', newline='') as output_file:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(output_file, 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'})

非标准格式的处理

有时候,csv 的文件可能不是标准的 csv 文件,无法直接读取,这时候我们需要指定一些额外参数来处理这些情况,这种情况下需要用到 dialect 功能,这个功能包含若干类和若干函数来帮助我们实现我们的目的。

dialect

默认情况下,三个 dialect 类型是内置的,分别是 'unix''excel'、和 'excel_tab''unix' 模式用来处理在 Unix 系统下生成的文件,而 'excel' 模式用来处理 excel 生成的 csv 文件,最后的 'excel_tab' 用来处理 excel 生成的制表符分割的文件,这三种预设已经覆盖了绝大多数的使用场景。

用户可以使用 Dialect 类来自定格式的处理:

csv.register_dialect(
    'unixpwd',
    delimiter=',',
    quoting=csv.QUOTE_MINIMAL,
    quotechar='"',
    doublequote=True,
    escapechar=None,
    lineterminator='\r\n',
    skipinitialspace=False,
    strict=False
)
  • name:自定义的格式名称
  • delimiter:用来分割各字段的字符,默认为 ,
  • doublequote:没啥用,看不懂,待补充
  • escapechar:没啥用,一般不用
  • lineterminator:换行符,默认是 '\r\n'
  • quotechar:当字段含有特殊字符是,用来引用的符号,默认是 ",不用改,不常用
  • quoting:加引号的行为,可以选择 QUOTE_ALLQUOTE_MINIMALQUOTE_NONNUMERICQUOTE_NONE 四种行为
  • skipinitialspace:是否跳过分隔符后面的空格,默认为 False
  • strict:严格模式,如果为 True,文件格式不对的时候会报错终止,否则会强制读取

使用方法就是先使用csv.register_dialect注册一个自定义dialect,然后在reader里面指定它:

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

Sniffer

正如它的名字,sniffer 提供了对格式的自动检测,并输出一个 dialect,提供了两个函数,分别是 has_header,用来检测文件是否包含标题行,和主函数 sniff,这里通过一个例子来学习它的使用:

with open('example.csv', newline='') as csvfile:
    # 通过文件的前1024行来确定文件的格式规范
    dialect = csv.Sniffer().sniff(csvfile.read(1024))
    # 将指针重置,从文件开始进行读取
    csvfile.seek(0)
    reader = csv.reader(csvfile, dialect)
    # ... process CSV file contents here ..
原文地址:https://www.cnblogs.com/wdyyy/p/python_csv.html
 
标签: CSV 文件 读写
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 使用C#编写一个.NET分析器(一) 使用csv模块的什么方法可以一次性将一行数据写入文件
    使用C#编写一个.NET分析器(一) 使用csv模块的
    译者注这是在Datadog公司任职的Kevin Gosse大佬使用C#编写.NET分析器的系列文章之一,在国内只有很少很少的人了解和研究.NET分析器,它常被用于APM(应用性能诊断)、IDE、诊断工具中,比如Datadog的APM,Visual Studio的分析器以及Rider和Reshaper等等。之前
    03-08
  • Python使用pandas导入csv文件内容的示例代码
    Python使用pandas导入csv文件内容的示例代码
    目录使用pandas导入csv文件内容1. 默认导入2. 指定分隔符3. 指定读取行数4. 指定编码格式5. 列标题与数据对齐使用pandas导入csv文件内容1. 默认导入在Python中导入.csv文件用的方法是read_csv()。使用read_csv()进行导入时,指定文件名即可import pandas as p
  • csv,txt,excel文件之间的转换,perl脚本
    最近接触一些需要csv,txt,excel文件之间的转换,根据一些网上搜索加上自己的改动,实现自己想要的结果为主要目的,代码的出处已经找不到了,还请见谅,以下主要是针对csvexcel 和txtexcel写的perl脚本。主要用到的模块是: Text::CSVSpreadsheet::WriteExcel
    02-09
  • perl解析CSV perl解析ascii表格
    到CPAN下载TEXT:CSV按照Readme.txt安装TEXT:CSV Modulesperl Makefile.plmakemake testmake install
    02-09
  • C语言实现读取CSV文件的方法详解 c语言读取csv文件数据
    C语言实现读取CSV文件的方法详解 c语言读取csv
    1、每一次只能读取同一种数据类型,不能读取字符串。2、第次读取会返回一个 CSV数据结构,有源数据和二维数组,行列数信息3、可以转换二维数组,但总大小不能变123.csvMonth,"CO2 (ppm) mauna loa, 1965-1980",,,CO2 (ppm) mauna loaJan-65,319.32,1,,,Fe
  • VB 读取csv文件数据
      Public adoConn As New ADODB.Connection   Private Sub csv()adoConn.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=C:\Documents and Settings\vinsonlu\Desktop\1400004"adoConn.Open()Dim rs As New ADODB.Record
    02-09
  • python中内置库csv的使用及说明
    目录读取写入kwargs参数所谓的CSV(逗号分隔值)格式是电子表格和数据库最常用的导入和导出格式。尝试使用CSV格式进行标准化描述之前已经使用了很多年。该csv模块reader和writer对象读取和写入序列。程序员还可以使用DictReader和DictWriter类以字典形式读取
  • PHP 数组与CSV文件互转
    PHP 数组与CSV文件互转
    项目说明数组导出CSV,ZIP文件,CSV,ZIP文件还原数组(阵列导出文件,文件恢复阵列)适用于导入导出会员,商品信息所有配置项ExecData中配置注意:读取中文文件名文件,数据时需要注意本地区域设置写入文件数据是UTF-8,设置 FetchFile 类中 fetchFile() 函
    02-09
  • C# CSV文件读写 cctv5体育节目表
    CSV是一种通用的、相对简单的文件格式,最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的。那么,C#如何读取和写入csv格式文件呢?CSV数据格式并没有非常统一的标准 但是为了避免出错 我们在开发的时候统一格式是这样的:"
    02-09
  • (转载)PERL 处理CSV
    #!/usr/bin/perl#use strict;open(FILE1,"C:/Perl/BX/BX-Users.csv");open(FILE2,"C:/Perl/BX/BX-Books.csv");open(FILE3,"C:/Perl/BX/BX-Book-Ratings.csv"); open(result1,"C:/Perl/BX/BX-Users.txt");my %table;my $record1;my $
    02-09
点击排行