处理CSV(python)

  • 简介
    • 1. CSV和Python简介
    • 2. 文章内容简介
  • 一、用csv模块读取和写入CSV文件
    • 1. CSV模块
    • 2. 示例
  • 二、用pandas库读取和写入CSV文件
    • 1. pandas
    • 2. 示例
  • 三、处理CSV文件中的特殊情况
    • 1. 特殊情况及处理方法
    • 2. 示例

简介

1. CSV和Python简介

CSV是一种常见的数据格式,可以用来存储和交换表格数据。CSV文件由一系列的行组成,每行包含一些用逗号分隔的字段。CSV文件可以用文本编辑器或excel打开和编辑,也可以用编程语言进行处理和分析。

Python是一种流行的编程语言,它有许多内置的模块和第三方库,可以方便地读取和写入CSV文件。

2. 文章内容简介

本文将介绍如何用Python处理CSV文件,包括以下几个方面:

  • 用csv模块读取和写入CSV文件
  • 用pandas库读取和写入CSV文件
  • 处理CSV文件中的特殊情况,如引号、换行符、编码等

一、用csv模块读取和写入CSV文件

1. CSV模块

csv模块是Python标准库中的一个模块,它提供了一些类和函数,可以帮助我们读取和写入CSV文件。csv模块常用的类有两个:

  • csv.reader:用来从一个文件对象或一个迭代器中读取CSV数据,返回一个迭代器,每次迭代返回一个列表,表示一行数据。
  • csv.writer:用来将数据写入一个文件对象或一个迭代器中,接受一个可迭代对象作为参数,每个元素是一个列表,表示一行数据。

2. 示例

示例文件:data.csv如下图:

用csv模块读取和写入CSV文件:

# 导入csv模块import csv# 以只读模式打开一个CSV文件with open('data.csv', 'r') as f:# 创建一个csv.reader对象,指定分隔符为逗号reader = csv.reader(f, delimiter=',')# 遍历reader对象,打印每一行数据for row in reader:print(row)# 用写入模式创建一个新的CSV文件,newline=''可以避免空行with open('new_data.csv', 'w', newline='') as f:# 创建一个csv.writer对象,指定分隔符为逗号writer = csv.writer(f, delimiter=',')# 写入一些数据,每个元素是一个列表,表示一行数据writer.writerow(['name', 'age', 'gender'])writer.writerow(['Alice', '25', 'F'])writer.writerow(['Bob', '30', 'M'])

执行结果:

新创建的new_data.csv文件如下图:

newline=’‘可以避免空行,如果没有这一句,在写入的每一行内容后面会有一行空行,如下图:

关于newline=’’的内容可以去看看pfm685757博主的文章: python3 writerow CSV文件多一个空行

二、用pandas库读取和写入CSV文件

1. pandas

pandas是一个流行的第三方库,它提供了一些高级的数据结构和函数,可以方便地进行数据分析和处理。pandas中最重要的数据结构是DataFrame,它是一个二维的表格数据结构,可以存储不同类型的数据,并支持各种操作。

pandas提供了一些函数,可以轻松地将DataFrame对象转换为CSV文件,或者从CSV文件中读取数据并创建DataFrame对象。这些函数有:

  • pandas.read_csv:从一个CSV文件或一个URL中读取数据,并返回一个DataFrame对象。
  • pandas.to_csv:将一个DataFrame对象写入一个CSV文件或一个字符串中。

2. 示例

示例文件:data.csv如下图所示:

用pandas读取和写入CSV文件:

# 导入pandas库import pandas as pd# 从一个CSV文件中读取数据,并创建一个DataFrame对象df = pd.read_csv('data.csv')# 打印df的基本信息print(df.info())# 打印df的表头及除表头外的5行数据,默认有表头print(df.head())# 用每个元素是字典的列表创建一个新的DataFrame对象new_df = pd.DataFrame([{'name': 'Alice', 'age': 25, 'gender': 'F'}, {'name': 'Tom', 'age': 28, 'gender': 'M'}])# 将new_df写入一个新的CSV文件中new_df.to_csv('new_data.csv', index=False)

运行结果:

新创建的new_data.csv文件如下图:

三、处理CSV文件中的特殊情况

有些CSV文件中可能会包含一些特殊情况,如引号、换行符、编码等。在处理这些文件时,我们需要特别注意这些情况,以免导致解析错误或数据丢失。

1. 特殊情况及处理方法

  • 引号:有些CSV文件中的字段可能包含引号,这会影响到CSV文件的解析。如果一个字段包含的文本中包含逗号,则需要将该字段用双引号引起来,以与其他字段区分开。而如果一个字段中本身就包含双引号,则需要用两个双引号来表示一个双引号,例如:“field with ““double quotes”””.
  • 换行符:有些CSV文件中的字段可能包含换行符,这也会影响到CSV文件的解析。通常情况下,换行符应该被视为字段内容的一部分,而不是分隔符。当读取包含换行符的CSV文件时,应该将整个文本字段读入并处理换行符。而写入包含换行符的CSV文件时,则需要将该字段用双引号或其他符号引起来,以确保换行符不会被看作是一个新的行。
  • 编码问题:CSV文件中的数据可能使用不同的编码方式进行存储,这也会影响到CSV文件的解析。通常情况下,应该使用与CSV文件相同的编码方式进行解析和处理。如果CSV文件的编码方式不确定,则可以尝试使用一些常见的编码方式(如UTF-8、GBK、ISO-8859-1等)进行解析,并观察数据的准确性和完整性。

2. 示例

示例文件:data_with_quotes.csv如下图:

处理包含引号和换行符的CSV文件:

import csv# 使用csv.reader读取包含引号和换行符的CSV文件with open('data_with_quotes.csv', 'r') as f:reader = csv.reader(f, delimiter=',', quotechar='"')for row in reader:print(row)# 使用csv.writer写入包含引号和换行符的CSV文件with open('new_data_with_quotes.csv', 'w', newline='') as f:# 使用quotechar参数来指定引号字符,quoting参数来指定如何引用特殊字符writer = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)writer.writerow(['name', 'age', 'text'])writer.writerow(['Alice', '25', 'This is a "text" field.'])writer.writerow(['Tom', '28', 'This is a field\nwith\nnewlines.'])

运行结果:

新创建的new_data_with_quotes.csv文件如下图所示: