详解Python读取和写入操作CSV文件的方法
目录
- 什么是 CSV 文件?
- 内置 CSV 库解析 CSV 文件
- 读取 CSV 文件csv
- 将 CSV 文件读入字典csv
- 可选的 Python CSV reader参数
- 使用 csv 写入文件
- 从字典中写入 CSV 文件csv
- 使用 pandas 库解析 CSV 文件
- pandas 读取 CSV 文件
- pandas 写入 CSV 文件
这里带和我一起回顾学习如何使用 Python 从文本文件中读取、处理和解析 CSV。
![详解Python读取和写入操作CSV文件的方法](https://img.it610.com/image/info11/3a1c91127261470a8e72e8a6b7280d9b.jpg)
文章图片
什么是 CSV 文件? 【详解Python读取和写入操作CSV文件的方法】CSV 文件(逗号分隔值文件)是一种纯文本文件,它使用特定的结构来排列表格数据。因为它是一个纯文本文件,所以它只能包含实际的文本数据,换句话说就是可打印的ASCII或Unicode字符。
CSV 文件的结构由其名称给出。通常 CSV 文件使用逗号分隔每个特定数据值。
column 1 name,column 2 name, column 3 name1st row data 1,1st row data 2,1st row data 32nd 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 格式。
![详解Python读取和写入操作CSV文件的方法](https://img.it610.com/image/info11/59aa29f4719e4894858fa173d670d444.jpg)
文章图片
读取 CSV 文件csv
CSV 文件使用 Python 的内置 open() 函数作为文本文件打开,该函数返回一个文件对象,然后将其传递给 reader 执行读取工作。
# employee_birthday.txtname,department,birthdayJohn,IT,NovemberTom,IT,March
读取操作代码,返回的每一行reader都是一个元素列表,String其中包含通过删除分隔符找到的数据。返回的第一行包含以特殊方式处理的列名。
import csvwith open('employee_birthday.txt') as csv_file:csv_reader = csv.reader(csv_file, delimiter=',')line_count = 0for row in csv_reader:if line_count == 0:print(f'names are {", ".join(row)}')line_count += 1else:print(f'\t{row[0]} works in the {row[1]} department, and was born in {row[2]}.')line_count += 1print(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 csvwith open('employee_birthday.txt', mode='r') as csv_file:csv_reader = csv.DictReader(csv_file)line_count = 0for row in csv_reader:if line_count == 0:print(f'Column names are {", ".join(row)}')line_count += 1print(f'\t{row["name"]} works in the {row["department"]} department, and was born in {row["birthday month"]}.')line_count += 1print(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 joinedjohn,1132 Anywhere Lane Hoboken NJ, 07030,Jan 4erica,1234 Smith Lane Hoboken NJ, 07030,March 2
此 CSV 文件包含三个字段:name、address和date joined,它们由逗号分隔。问题是该 address 字段的数据还包含一个逗号来表示邮政编码。
有三种方法可以处理这个。
- 使用不同的分隔符,使用delimiter可选参数来指定新的分隔符。
- 将数据括在引号,选择的分隔符的特殊性质在带引号的字符串中会被忽略。quotechar 可以使用可选参数指定用于引用的字符。
- 转义数据中的分隔符,转义字符的工作方式与它们在格式字符串中的作用一样,使对被转义字符(在本例中为分隔符)的解释无效。如果使用转义字符,则必须使用 escapechar 可选参数指定。
使用 csv 写入文件
可以使用 writer 对象和 .write_row() 方法写入 CSV 文件。
import csvwith 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 delimitercsv.QUOTE_MINIMAL: writer对象只引用那些包含特殊字符。
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_ALL: writer对象引用所有字段,如字段分隔符,quotechar或任何字符 lineterminator。
csv.QUOTE_NONNUMERIC: writer对象引用所有非数字字段,指示读者将所有非引用字段转换为float类型。
csv.QUOTE_NONE: writer对象不引用字段,如未设置escapechar错误抛出;指示reader不对引号字符执行特殊处理。
John Smith,Accounting,NovemberErica Meyers,IT,March
从字典中写入 CSV 文件csv
编写字典时需要 DictReader 参数。
import csvwith 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 文件
![详解Python读取和写入操作CSV文件的方法](https://img.it610.com/image/info11/5e9f3f9d8c464c9c822b68d97d8c5ab8.jpg)
文章图片
可以先安装 pandas 库。
pip install pandas
pandas 读取 CSV 文件
# hrdata.csvName,Hire Date,Salary,Sick Days remainingGraham Chapman,03/15/14,50000.00,10John Cleese,06/01/15,65000.00,8Eric Idle,05/12/14,45000.00,10Terry Jones,11/01/13,70000.00,3Terry Gilliam,08/12/14,48000.00,7Michael Palin,05/23/13,66000.00,8
使用 pandas 读取 csv 文件。
import pandas as pddf = pd.read_csv('hrdata.csv')print(df)Name Hire DateSalarySick Days remaining0Graham Chapman03/15/1450000.0101John Cleese06/01/1565000.082Eric Idle05/12/1445000.0103Terry Jones11/01/1370000.034Terry Gilliam08/12/1448000.075Michael Palin05/23/1366000.08
增加索引列读取 csv 文件,这样索引序号就没有了。
import pandas as pddf = pd.read_csv('hrdata.csv', index_col='Name')print(df)Hire DateSalarySick Days remainingNameGraham Chapman03/15/1450000.010John Cleese06/01/1565000.08Eric Idle05/12/1445000.010Terry Jones11/01/1370000.03Terry Gilliam08/12/1448000.07Michael Palin05/23/1366000.08
修复Hire Date字段的数据类型为日期数据。
import pandas as pddf = pd.read_csv('hrdata.csv', index_col='Name', parse_dates=['Hire Date'])print(df)Hire DateSalarySick Days remainingNameGraham Chapman 2014-03-1550000.010John Cleese2015-06-0165000.08Eric Idle2014-05-1245000.010Terry Jones2013-11-0170000.03Terry Gilliam2014-08-1248000.07Michael Palin2013-05-2366000.08
也可以统一进行处理。
import pandas as pddf = pd.read_csv('hrdata.csv', index_col='Employee', parse_dates=['Hired'], header=0, names=['Employee', 'Hired','Salary', 'Sick Days'])print(df)HiredSalarySick DaysEmployeeGraham Chapman 2014-03-1550000.010John Cleese2015-06-0165000.08Eric Idle2014-05-1245000.010Terry Jones2013-11-0170000.03Terry Gilliam2014-08-1248000.07Michael Palin2013-05-2366000.08
pandas 写入 CSV 文件
写入操作和读取操作一样简单。
import pandas as pddf = 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文件的方法的文章就介绍到这了,更多相关Python读取写入CSV内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- python中SQLAlchemy使用前端页面实现插入数据
- 图文详解Mysql索引的最左前缀原则
- 使用Python爬虫爬取小红书完全过程
- Python 的 float 是单精度还是双精度
- Python配置同花顺全数据接口教程详解
- python中的|python中的 sorted()函数和sort()方法区别
- python|python tkinter实现简单计算器功能
- 一篇文章带你学习Python3的高级特性(2)
- C++左值与右值|C++左值与右值,右值引用,移动语义与完美转发详解
- Jmeter通过OS进程取样器调用Python脚本实现参数互传