这篇文章主要介绍“Python怎么读取和写入操作CSV文件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么读取和写入操作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库专为使用 Excel 生成的 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.
除了处理单个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.
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 字段的数据还包含一个逗号来表示邮政编码。
有三种方法可以处理这个。
使用不同的分隔符,使用delimiter可选参数来指定新的分隔符。
将数据括在引号,选择的分隔符的特殊性质在带引号的字符串中会被忽略。quotechar 可以使用可选参数指定用于引用的字符。
转义数据中的分隔符,转义字符的工作方式与它们在格式字符串中的作用一样,使对被转义字符(在本例中为分隔符)的解释无效。如果使用转义字符,则必须使用 escapechar 可选参数指定。
可以使用 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
编写字典时需要 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 库。
pip install pandas
# 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
写入操作和读取操作一样简单。
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文件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。