百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Python CSV如何在Python中读取和写入CSV文件

toyiye 2024-06-21 11:54 9 浏览 0 评论

Python CSV 模块允许你将数据存储为 CSV(逗号分隔值)文件。虽然许多应用程序使用数据库,但有时使用 CSV 文件可能会更好,例如当你为另一个需要这种格式的应用程序生成数据时。


在本文中,你将学习如何使用 Python 以两种不同的方式读取和写入 CSV 文件中的数据:使用 Python CSV 模块和使用第三方 Pandas 库。


什么是 .csv 文件?


CSV 文件是用于存储表格数据的纯文本文件。因为它是纯文本,你可以在文本编辑器中打开 CSV 文件进行编辑。你还可以在 Microsoft Excel 和其他电子表格应用程序中打开 CSV 文件,以查看以表格格式显示的数据。以下是示例 CSV 文件的内容:


姓名,省份,城市,出生日期
张三,安徽省,合肥市,1990年1月25日
赵四,广东省,广州市,1991年3月15日
王五,湖北省,武汉市,1992年4月8日


以下是你在 Excel 中打开此文件时的外观:


请注意,换行符分隔每个数据集,第一行包含每列的标题。然后用逗号分隔每一行的数据。在标准 CSV 格式中,分隔每个值的字符(也称为分隔符)是逗号。


但并非所有 CSV 文件都使用逗号作为分隔符。有时会使用制表符、分号或冒号,尤其是在数据中有逗号的情况下。数据值也可以用单引号或双引号括起来,这允许你在数据值本身中使用逗号。


"one,one", "two,two", "three,three"


所有类型的应用程序都可以使用 CSV 文件(包括电子表格和数据库)来获取数据并将数据从一个应用程序传输到另一个应用程序。由于它们是纯文本文件,任何具有文本处理能力的编程语言都可以处理它们。



2022 年完整 Python 训练营,从菜鸟到大师


https://www.koudaizy.com/tutorials/development/complete-python-bootcamp/


使用 Python CSV 处理 CSV 文件


Python 编程语言附带一个 CSV 模块,该模块允许在不安装第三方库的情况下读取和写入 CSV 文件。默认情况下,它旨在处理 Microsoft Excel 生成的 CSV 文件格式,但它可以配置为读取和写入任何类型的 CSV 文件。


使用 CSV 模块读取 CSV 文件


要解析 CSV 数据,你可以使用 CSV 模块的阅读器对象。假设我们在名为 names.csv 的文件中有第一个 CSV 示例,其中包含名称、城市、州和生日月份值。这是我们可以用来解析文件的Python 代码示例:


# 导入CSV模块
import csv
with open('name.csv') as csv_file:
    # 创建一个 CSV Reader 对象
    reader = csv.reader(csv_file)
    # 设置行数所以我们知道哪一行的标题
    line_count = 0
    for row in reader:
        # 从文件的第一行打印出标题
        if line_count == 0:
            print(f'列标题是: {", ".join(row)}')
            line_count += 1
        # 从剩余的行中打印出数据
        else:
            print(f'{row[0]},住在 {row[1]},{row[2]}, 出生日期是 {row[3]}。')
            line_count += 1
    print(f'CSV文件一共有 {line_count} 行')


当这个 Python 脚本运行时,它会打印出来:


列标题是: 姓名, 省份, 城市, 出生日期
张三,住在 安徽省,合肥市, 出生日期是 1990年1月25日。
赵四,住在 广东省,广州市, 出生日期是 1991年3月15日。
王五,住在 湖北省,武汉市, 出生日期是 1992年4月8日。
CSV文件一共有 4 行


reader 对象返回行,它是字符串项的列表,并且由于第一行包含每列数据的标题,因此它的处理方式不同。示例代码中的注释更详细地解释了正在发生的事情。


使用 CSV 模块将 CSV 文件读入字典


我们用于解析 CSV 文件的最后一种方法有效,但它需要处理字符串列表。解析 CSV 的一种更简洁的方法是将数据读入 Python 字典。


我们将使用我们在上一个脚本中处理的相同 CSV 数据,但这次将使用 CSV 模块的 DictReader 对象。这是代码:


# 导入 csv 模块
import csv
with open('name.csv') as csv_file:
    # 创建一个 CSV DictReader 对象
    reader = csv.DictReader(csv_file)
    # 使用 reader.fieldnames 获取标题
    print(f'列标题是:{", ".join(reader.fieldnames)}')
    # 设置一个行计数器
    line_count = 0
    for row in reader:
        print(f"{row['姓名']},住在 {row['省份']},{row['城市']}, 出生日期是 {row['出生日期']}。")
        line_count += 1
    print(f'CSV文件一共有 {line_count} 行')


这将打印出与最后一个代码相同的结果:


列标题是:姓名, 省份, 城市, 出生日期
张三,住在 安徽省,合肥市, 出生日期是 1990年1月25日。
赵四,住在 广东省,广州市, 出生日期是 1991年3月15日。
王五,住在 湖北省,武汉市, 出生日期是 1992年4月8日。
CSV文件一共有 3 行


但是当你使用 DictReader 方法时,它会自动解析标题以创建字典。因此,我们必须使用 DictReader 对象的 fieldnames 属性,而不是打印第一行来获取标题。


当我们访问每一行中的值时,我们现在可以通过标题名称而不是数字索引来访问它们。另外,请注意 DictReader 仅迭代数据行,而不是标题行。


使用 Python CSV 读取自定义 CSV 文件


我们当前使用的 CSV 文件具有 Python CSV 模块所期望的标准 CSV 格式,因此我们只需将文件传递给 reader 对象,它就可以工作。


但是,如果你的 CSV 文件使用不同的分隔符、将数据用引号括起来或使用转义字符,则必须向读取器或 DictReader 方法调用添加额外参数才能正确处理文件。


如果我们有一个使用制表符分隔符(通常称为 TSV 文件)的 CSV 文件,将值用双引号括起来,并使用反斜杠作为转义字符,我们将不得不像这样设置这些额外的参数:


# 使用 reader
with open('names.csv') as csv_file:
    reader = csv.reader(csv_file, delimiter='	', quotechar='"', escapechar='\')
# 使用 DictReader
with open('names.csv') as csv_file:
    reader = csv.DictReader(csv_file, delimiter='	', quotechar='"', escapechar='\')


使用 Python CSV 编写 CSV 文件


要使用 Python CSV 模块将数据写入 CSV 文件,你可以使用写入器对象之一:writer 或 DictWriter。我们将从使用 writer 开始,它使用 Python 列表来创建 CSV 文件的行。


writer 方法也接受与 reader 方法相同的参数:delimiter、quotechar 和 escapechar。这允许你生成你选择的任何 CSV 格式。它还接受一个引用参数,我们可以在下面的示例中看到它的作用:


# 使用 Python open 方法打开文件进行写入,
with open('example.csv', mode='w') as example_file:
    writer = csv.writer(example_file, delimiter=',', quotechar='"', quoting =csv.QUOTE_MINIMAL)
    # 用 writerow 方法写入表头行
    writer.writerow(['姓名', '省份', '城市', '出生日期'])
    # 用 writerow 方法写入数据行
    writer.writerow( ['张三', '安徽省', '合肥市', '1990年1月25日'])
    writer.writerow(['赵四', '广东省', '广州市', '1991年3月15日'])
    writer.writerow(['王五', '湖北省', '武汉市', '1992年4月8日'])


上面的代码将生成一个看起来与我们一直在使用的文件相同的文件。尽管我们将 quotechar 设置为双引号,但其中没有引号。


这是因为引用参数设置为 csv.QUOTE_MINIMAL。这个参数告诉作者如何使用引号,并且有四个可能的值:


  • csv.QUOTE_MINIMAL。这是默认设置,仅当字段包含分隔符或引号字符时,编写器才会应用引号。

  • csv.QUOTE_ALL。作者将对每个字段应用引号。

  • csv.QUOTE_NONNUMERIC。作者将引用所有文本字段并将任何数字数据转换为浮点数据类型。

  • csv.QUOTE_NONE。作者将转义分隔符而不是使用引号。如果使用此值,则需要一个 escapechar 参数。


使用 CSV 将 CSV 文件写入字典


就像我们可以使用 DictReader 方法而不是 reader 方法来为我们的数据使用字典一样,我们可以使用 DictWriter 方法而不是 writer 方法。这是一个编写相同 CSV 文件的示例:


# 导入 csv 模块
import csv
# 用 Python open 方法打开要写入的文件
with open('example.csv', mode='w') as example_file:
    # 标题列表
    fieldnames = ['姓名', '省份', '城市', '出生日期']
    # 创建 DictWriter 对象
    writer = csv.DictWriter(example_file, fieldnames=fieldnames, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    # 写入表头row with writeheader 方法
    writer.writeheader()
    # 使用 writerow 方法写入数据行
    writer.writerow({'姓名': '张三', '省份': '安徽省', '城市': '合肥市', '出生日期': '1990年1月25日'})
    writer.writerow({'姓名': '李四', '省份': '广东省', '城市': '广州市', '出生日期': '1991年3月15日'})
    writer.writerow({'姓名': '王五', '省份': '湖北省', '城市': '武汉市', '出生日期': '1992年4月8日'})


DictWriter 方法接受 writer 方法所做的所有参数,但它还有另一个必需参数:fieldnames。此参数是 CSV 文件中标题名称的列表,也是你将用于创建数据行的字典中的键。要打印标题行,我们调用 writeheader 方法,而不是像使用 writer 方法那样手动创建行。



完整的 Python 2022 年机器学习和数据科学训练营


https://www.koudaizy.com/tutorials/complete-machine-learning-and-data-science-zero-to-mastery/


使用 pandas 处理 CSV 文件


更高级的 CSV 文件处理的另一个选项是使用Python pandas 模块。该模块为表格数据提供高级分析和操作功能,通常与机器学习、数据分析和数据可视化库结合使用。它也是开源且免费使用的,但你必须使用 Python 包管理器单独安装它。如果你使用的是 pip,则可以使用以下命令安装它:


pip install pandas


如果你使用的是Anaconda,你可以通过运行以下命令来安装它:


conda install pandas


用 pandas 读取 CSV 文件


使用 pandas 读取 CSV 文件非常简单。只需确保安装了 pandas 模块,导入模块,在文件上调用 pandas read_csv 方法,然后打印结果。你不必使用 Python open 方法或遍历文件中的行。这一切都为你完成了。这是一个例子:


# 导入 pandas 模块
import pandas
# 将 csv 文件读入 DataFrame
dataframe = pandas.read_csv('names.csv')
print(dataframe)


结果如下:


   姓名   省份   城市        出生日期
0  张三  安徽省  合肥市  1990年1月25日
1  赵四  广东省  广州市  1991年3月15日
2  王五  湖北省  武汉市   1992年4月8日


当 pandas 读取 CSV 文件时,它会将数据放入数据框中。数据框是一种二维标记的数据结构,有点像内存中的电子表格或数据库。要了解有关pandas的更多信息,请查看我们 使用Pandas 和 Python 进行数据分析的课程。


用 pandas 编写 CSV 文件


你还可以从数据框在 pandas 中创建 CSV 文件。这是一个例子:


# 导入 pandas 模块
import pandas
# 创建一个数据
dataframe = pandas.DataFrame([
 ['张三', '安徽省', '合肥市', '1990年1月25日'],
 ['赵四', '广东省', '广州市', '1991年3月15日'],
 ['王五', '湖北省', '武汉市', '1992年4月8日']],
 columns=['姓名', '省份', '城市', '出生日期'])
# 写数据帧到 CSV 文件
dataframe.to_csv('example.csv', index=False)


此代码将重新创建我们在整篇文章中使用的相同 CSV。pandas.DataFrame 中的第一个参数包含我们要作为列表列表写入 CSV 的数据。每个嵌套列表都将成为一个数据行。通过设置命名列参数,我们定义了数据框中的列,这些列将成为 CSV 文件的标题。


然后我们在我们创建的数据帧上调用 to_csv 方法来生成 CSV 文件。第一个参数是我们要创建的文件的路径,设置为 false 的命名索引参数告诉 pandas 不包含它为数据帧创建的索引。


如果没有这个,我们的 CSV 文件的第一列将有一个空标题和每行的索引号。要了解有关将 pandas 与 CSV 文件一起使用的更多信息,请参阅我们的将 pandas 导出为 CSV 的指南


结论


CSV 文件格式是一种方便的通用格式,用于将数据从一个应用程序传输到另一个应用程序。你只需在 Excel 或文本编辑器中打开文件即可检查你正在使用的数据,而无需使用专有应用程序。


如果你想用 Python 简单地读写 CSV 文件,该功能是内置的并且易于使用。但是,如果你打算进行数据分析,Python pandas 模块可能是最佳选择,因为它具有所有数据操作功能。如果你准备好使用 Python 构建实际技能,我们的Python 课程将帮助你构建它们。


相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码