Python怎么读取和写入操作CSV文件

发布时间:2022-03-24 16:24:53 作者:iii
来源:亿速云 阅读:200

这篇文章主要介绍“Python怎么读取和写入操作CSV文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么读取和写入操作CSV文件”文章能帮助大家解决问题。

Python怎么读取和写入操作CSV文件

什么是 CSV 文件?

CSV 文件(逗号分隔值文件)是一种纯文本文件,它使用特定的结构来排列表格数据。因为它是一个纯文本文件,所以它只能包含实际的文本数据,换句话说就是可打印的ASCII或Unicode字符。

CSV 文件的结构由其名称给出。通常 CSV 文件使用逗号分隔每个特定数据值。

column 1 name,column 2 name, column 3 name
1st row data 1,1st row data 2,1st row data 3
2nd row data 1,2nd row data 2,2nd row data 3

注意每条数据是如何用逗号分隔的。通常第一行标识每条数据换句话说,就是数据列的名称。之后的每一行都是实际数据,并且受文件大小限制。

通常分隔符(,)逗号不是唯一使用的。其他流行的分隔符包括制表符 ( \t)、冒号 ( : ) 和分号 ( ; ) 字符。

正确解析 CSV 文件需要知道正在使用哪个分隔符。

CSV 文件从何而来?

CSV 文件通常由处理大量数据的程序创建。它们是从电子表格和数据库中导出数据以及在其他程序中导入或使用数据的便捷方式。例如可以将数据挖掘程序的结果导出为 CSV 文件,然后将其导入电子表格以分析数据、生成图表以进行演示或准备发布报告。

CSV 文件非常容易以 Python编程方式处理,可以直接处理 CSV 文件。

内置 CSV 库解析 CSV 文件

csv库专为使用 Excel 生成的 CSV 文件开箱即用而设计,并且适应各种 CSV 格式。

读取 CSV 文件csv

CSV 文件使用 Python 的内置 open() 函数作为文本文件打开,该函数返回一个文件对象,然后将其传递给 reader 执行读取工作。

# employee_birthday.txt
name,department,birthday
John,IT,November
Tom,IT,March

读取操作代码,返回的每一行reader都是一个元素列表,String其中包含通过删除分隔符找到的数据。返回的第一行包含以特殊方式处理的列名。

import csv

with open('employee_birthday.txt') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print(f'names are {", ".join(row)}')
            line_count += 1
        else:
            print(f'\t{row[0]} works in the {row[1]} department, and was born in {row[2]}.')
            line_count += 1
    print(f'Processed {line_count} lines.')

names are name, department, birthday
	John works in the IT department, and was born in November.
	Tom works in the IT department, and was born in March.
Processed 3 lines.

将 CSV 文件读入字典csv

除了处理单个String元素的列表,还可以将 CSV 数据直接读入字典。

import csv

with open('employee_birthday.txt', mode='r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print(f'Column names are {", ".join(row)}')
            line_count += 1
        print(f'\t{row["name"]} works in the {row["department"]} department, and was born in {row["birthday month"]}.')
        line_count += 1
    print(f'Processed {line_count} lines.')


Column names are name, department, birthday
	John works in the IT department, and was born in November.
	Tom works in the IT department, and was born in March.
Processed 3 lines.

可选的 Python CSV reader参数

delimiter 指定用于分隔每个字段的字符。默认值为逗号 ( ’ , ')。

quotechar 指定用于包围包含分隔符的字段的字符。默认值为双引号 ( ’ " ')。

escapechar 指定用于转义分隔符的字符,以防不使用引号。默认是没有转义字符。

name,address,date joined
john,1132 Anywhere Lane Hoboken NJ, 07030,Jan 4
erica,1234 Smith Lane Hoboken NJ, 07030,March 2

此 CSV 文件包含三个字段:name、address和date joined,它们由逗号分隔。问题是该 address 字段的数据还包含一个逗号来表示邮政编码。

有三种方法可以处理这个。

使用 csv 写入文件

可以使用 writer 对象和 .write_row() 方法写入 CSV 文件。

import csv

with open('employee_file.csv', mode='w') as employee_file:
    employee_writer = csv.writer(employee_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

    employee_writer.writerow(['John Smith', 'Accounting', 'November'])
    employee_writer.writerow(['Erica Meyers', 'IT', 'March'])

csv.QUOTE_MINIMAL means only when required, for example, when a field contains either the quotechar or the delimiter
csv.QUOTE_ALL means that quotes are always placed around fields.
csv.QUOTE_NONNUMERIC means that quotes are always placed around
fields which do not parse as integers or floating point numbers.
csv.QUOTE_NONE means that quotes are never placed around fields.

csv.QUOTE_MINIMAL: writer对象只引用那些包含特殊字符。

csv.QUOTE_ALL: writer对象引用所有字段,如字段分隔符,quotechar或任何字符 lineterminator。

csv.QUOTE_NONNUMERIC: writer对象引用所有非数字字段,指示读者将所有非引用字段转换为float类型。

csv.QUOTE_NONE: writer对象不引用字段,如未设置escapechar错误抛出;指示reader不对引号字符执行特殊处理。

John Smith,Accounting,November
Erica Meyers,IT,March

从字典中写入 CSV 文件csv

编写字典时需要 DictReader 参数。

import csv

with open('employee_file2.csv', mode='w') as csv_file:
    fieldnames = ['emp_name', 'dept', 'birth_month']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'emp_name': 'John Smith', 'dept': 'Accounting', 'birth_month': 'November'})
    writer.writerow({'emp_name': 'Erica Meyers', 'dept': 'IT', 'birth_month': 'March'})

使用 pandas 库解析 CSV 文件

可以先安装 pandas 库。

pip install pandas

pandas 读取 CSV 文件

# hrdata.csv
Name,Hire Date,Salary,Sick Days remaining
Graham Chapman,03/15/14,50000.00,10
John Cleese,06/01/15,65000.00,8
Eric Idle,05/12/14,45000.00,10
Terry Jones,11/01/13,70000.00,3
Terry Gilliam,08/12/14,48000.00,7
Michael Palin,05/23/13,66000.00,8

使用 pandas 读取 csv 文件。

import pandas as pd
df = pd.read_csv('hrdata.csv')
print(df)
             Name Hire Date   Salary  Sick Days remaining
0  Graham Chapman  03/15/14  50000.0                   10
1     John Cleese  06/01/15  65000.0                    8
2       Eric Idle  05/12/14  45000.0                   10
3     Terry Jones  11/01/13  70000.0                    3
4   Terry Gilliam  08/12/14  48000.0                    7
5   Michael Palin  05/23/13  66000.0                    8

增加索引列读取 csv 文件,这样索引序号就没有了。

import pandas as pd
df = pd.read_csv('hrdata.csv', index_col='Name')
print(df)
               Hire Date   Salary  Sick Days remaining
Name                                                  
Graham Chapman  03/15/14  50000.0                   10
John Cleese     06/01/15  65000.0                    8
Eric Idle       05/12/14  45000.0                   10
Terry Jones     11/01/13  70000.0                    3
Terry Gilliam   08/12/14  48000.0                    7
Michael Palin   05/23/13  66000.0                    8

修复Hire Date字段的数据类型为日期数据。

import pandas as pd
df = pd.read_csv('hrdata.csv', index_col='Name', parse_dates=['Hire Date'])
print(df)
                Hire Date   Salary  Sick Days remaining
Name                                                   
Graham Chapman 2014-03-15  50000.0                   10
John Cleese    2015-06-01  65000.0                    8
Eric Idle      2014-05-12  45000.0                   10
Terry Jones    2013-11-01  70000.0                    3
Terry Gilliam  2014-08-12  48000.0                    7
Michael Palin  2013-05-23  66000.0                    8

也可以统一进行处理。

import pandas as pd
df = pd.read_csv('hrdata.csv', 
        index_col='Employee', 
        parse_dates=['Hired'], 
        header=0, 
        names=['Employee', 'Hired','Salary', 'Sick Days'])
print(df)
                    Hired   Salary  Sick Days
Employee                                     
Graham Chapman 2014-03-15  50000.0         10
John Cleese    2015-06-01  65000.0          8
Eric Idle      2014-05-12  45000.0         10
Terry Jones    2013-11-01  70000.0          3
Terry Gilliam  2014-08-12  48000.0          7
Michael Palin  2013-05-23  66000.0          8

pandas 写入 CSV 文件

写入操作和读取操作一样简单。

import pandas as pd
df = pd.read_csv('hrdata.csv', 
        index_col='Employee', 
        parse_dates=['Hired'],
        header=0, 
        names=['Employee', 'Hired', 'Salary', 'Sick Days'])
df.to_csv('hrdata_modified.csv')

关于“Python怎么读取和写入操作CSV文件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

推荐阅读:
  1. python读取和写入csv文件的方法
  2. python如何读取csv文件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python csv

上一篇:python中SQLAlchemy怎么使用前端页面实现插入数据

下一篇:C++单例模式实例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》