python写入csv文件的几种方法总结,python语言引入内置的模块csv对csv文件进行读写操作
CSV文件(逗号分隔值文件)是一个纯文本文件,它使用特定的结构来排列表格数据。本文将详细介绍用Python读写CSV文件的方法,有需要的可以参考一下。
目录
什么是CSV文件?内置csv库解析csv文件读取csv文件读取csv文件读取CSV字典可选Python CSV阅读器参数使用Panda库从字典写入CSV文件解析CSV文件读取CSV文件读取Panda写入CSV文件最流行的数据交换格式之一是CSV格式。它是一个需要通过键盘和控制台以外的手段输入和输出信息的程序。通过文本文件交换信息是程序间共享信息的一种常见方式。在这里和我一起回顾一下,学习如何使用Python从文本文件中读取、处理和解析CSV。
什么是 CSV 文件?
CSV文件(逗号分隔值文件)是一个纯文本文件,它使用特定的结构来排列表格数据。因为它是一个纯文本文件,所以它只能包含实际的文本数据,也就是可打印的ASCII或Unicode字符。
CSV文件的结构由其名称给出。通常CSV文件使用逗号来分隔每个特定的数据值。
第1列名称,第2列名称,第3列名称
第一行数据1,第一行数据2,第一行数据3
第二行数据1、第二行数据2、第二行数据3
注意每段数据是如何用逗号分隔的。通常第一行标识每条数据,换句话说,就是数据列的名称。后面的每一行都是实际数据,受文件大小的限制。
通常分隔符(,)逗号不是唯一使用的。其他流行的分隔符包括制表符(\t)、冒号(:)和分号(;)性格。
正确解析CSV文件需要知道使用的分隔符。
CSV 文件从何而来?
CSV文件通常由处理大量数据的程序创建。它们是从电子表格和数据库中导出数据以及在其他程序中导入或使用数据的便捷方式。例如,您可以将数据挖掘程序的结果导出为CSV文件,然后将其导入电子表格以分析数据、生成用于演示的图表或准备发布报告。
CSV文件在Python编程中非常容易处理,可以直接处理。
内置 CSV 库解析 CSV 文件
Csv库是专门为Excel开箱生成的CSV文件设计的,适应各种CSV格式。
读取 CSV 文件csv
CSV文件使用Python内置的open()函数作为文本文件打开,该函数返回一个file对象,然后将其传递给reader进行读取。
# employee _生日. txt
姓名、部门、生日
约翰,IT,11月
汤姆,它,三月
读取操作码,reader返回的每一行都是元素列表,字符串包含删除分隔符找到的数据。由返回的第一行包含以特殊方式处理的列名。
导入csv
打开( employee_birthday.txt )作为csv_file:
csv_reader=csv.reader(csv_file,分隔符=,)
line_count=0
对于csv_reader:中的行
如果line_count==0:
print(f 名称为{ ,。join(row)} )
line_count=1
else:
print(f\t{row[0]}在{row[1]}部门工作
t, and was born in {row[2]}.)
line_count += 1
print(fProcessed {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 = 0
for row in csv_reader:
if line_count == 0:
print(fColumn 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(fProcessed {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 4
erica,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 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,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 文件
可以先安装 pandas 库。
pip install pandas
pandas 读取 CSV 文件
# hrdata.csvName,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 pddf = 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 pddf = 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 pddf = 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 pddf = 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 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内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。