我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【100天精通python】Day27:文件与IO操作_CSV文件处理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【100天精通python】Day27:文件与IO操作_CSV文件处理

目录

 专栏导读 

 1. CSV文件格式简介

2 csv模块的使用方法

3 读写CSV文件的示例

3.1 读取CSV文件示例

3.2 写入CSV文件示例

4 CSV文件的常用数据处理

4.1 读取CSV文件的特定列

4.2 读取CSV文件的特定行

5 csv 文件的特殊处理

5.1 处理包含逗号、换行符、引号的字段

5.2 处理非ASCII字符 

5.3 处理空字段 

5.3.1 读取空字段

5.3.2  指定参数处理空字段


 专栏导读 

专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html


 1. CSV文件格式简介

        CSV(逗号分隔值)是一种常见的文本文件格式,用于存储表格数据。每行代表一条记录,每个字段之间使用逗号或其他特定分隔符进行分隔。CSV文件可以使用纯文本编辑器打开,也可以用电子表格软件(如Microsoft Excel、Google Sheets)进行编辑。

csv模块的使用方法

Python中的csv模块提供了处理CSV文件的功能。它包含用于读取和写入CSV文件的各种方法和对象,如csv.readercsv.writercsv.DictReadercsv.DictWriter等。

3 读写CSV文件的示例

3.1 读取CSV文件示例

假设我们有一个名为data.csv的CSV文件,内容如下:

Name,Age,CityJohn,30,New YorkJane,25,San FranciscoMike,35,Chicago

我们可以使用csv.reader来读取并处理这个CSV文件

import csv# 读取CSV文件并处理数据with open('data.csv', 'r', newline='') as file:    csv_reader = csv.reader(file)        # 遍历每一行数据    for row in csv_reader:        print(row)

输出:

['Name', 'Age', 'City']['John', '30', 'New York']['Jane', '25', 'San Francisco']['Mike', '35', 'Chicago']

3.2 写入CSV文件示例

现在,假设我们有一组字典数据,我们想将其写入到一个新的CSV文件output.csv中:

import csv# 要写入的数据data = [    {"Name": "Alice", "Age": 28, "City": "London"},    {"Name": "Bob", "Age": 32, "City": "Paris"},    {"Name": "Eve", "Age": 24, "City": "Berlin"}]# 写入CSV文件with open('output.csv', 'w', newline='') as file:    fieldnames = ['Name', 'Age', 'City']    csv_writer = csv.DictWriter(file, fieldnames=fieldnames)    # 写入表头    csv_writer.writeheader()    # 写入数据    csv_writer.writerows(data)print("Data has been written to output.csv.")

输出: 

Name,Age,CityAlice,28,LondonBob,32,ParisEve,24,Berlin

4 CSV文件的常用数据处理

4.1 读取CSV文件的特定列

        通过csv.readercsv.DictReader读取CSV文件后,仅保留所需的列数据进行处理。我们可以通过列索引或列名来指定特定的列。

示例: 假设我们有一个名为data.csv的CSV文件,内容如下:

Name,Age,CityJohn,30,New YorkJane,25,San FranciscoMike,35,Chicago

我们将展示两种方法来读取CSV文件的特定列:

方法一:使用列索引

import csv# 读取CSV文件并获取特定列数据with open('data.csv', 'r', newline='') as file:    csv_reader = csv.reader(file)        # 将列索引设为1(第二列Age)    column_index = 1        # 初始化存储特定列数据的列表    specific_column_data = []        # 遍历每一行数据    for row in csv_reader:        # 获取特定列的值,并添加到列表中        specific_column_data.append(row[column_index])print("Specific column data:", specific_column_data)

输出:

Specific column data: ['Age', '30', '25', '35']

方法二:使用列名

import csv# 读取CSV文件并获取特定列数据with open('data.csv', 'r', newline='') as file:    csv_reader = csv.DictReader(file)        # 将列名设为'Age'    column_name = 'Age'        # 初始化存储特定列数据的列表    specific_column_data = []        # 遍历每一行数据    for row in csv_reader:        # 获取特定列的值,并添加到列表中        specific_column_data.append(row[column_name])print("Specific column data:", specific_column_data)

输出

Specific column data: ['30', '25', '35']

以上示例中,我们通过csv.readercsv.DictReader分别读取CSV文件,并根据特定的列索引或列名提取所需的列数据。然后,我们将特定列的数据存储在一个列表中,供后续处理使用。

注意:使用csv.DictReader时,每行数据将被解析为一个字典,其中键是CSV文件的第一行(表头)的列名。这样我们可以通过列名来访问特定列的值。而使用csv.reader时,每行数据将被解析为一个列表,我们可以通过列索引来访问特定列的值。

4.2 读取CSV文件的特定行

        要读取CSV文件的特定行,我们可以使用csv.readercsv.DictReader来逐行读取CSV文件,并在读取过程中判断行号是否满足特定条件。以下是使用csv.readercsv.DictReader读取CSV文件特定行的示例:

示例1:使用csv.reader读取特定行

假设我们有一个名为data.csv的CSV文件,内容如下:

Name,Age,CityJohn,30,New YorkJane,25,San FranciscoMike,35,Chicago

我们可以使用csv.reader来读取CSV文件,并根据特定的行号来获取对应的行数据:

import csv# 读取CSV文件的特定行def read_specific_row(csv_file, row_number):    with open(csv_file, 'r', newline='') as file:        csv_reader = csv.reader(file)        for i, row in enumerate(csv_reader):            if i == row_number:                return row# 读取第二行(索引为1)的数据specific_row = read_specific_row('data.csv', 1)print("Specific row data:", specific_row)

输出

Specific row data: ['Jane', '25', 'San Francisco']

示例2:使用csv.DictReader读取特定行

        如果CSV文件的第一行是列名,我们可以使用csv.DictReader来读取CSV文件,并根据特定条件来获取特定行的数据:

import csv# 读取CSV文件的特定行def read_specific_row(csv_file, row_number):    with open(csv_file, 'r', newline='') as file:        csv_reader = csv.DictReader(file)        for i, row in enumerate(csv_reader):            if i == row_number:                return row# 读取第二行(索引为1)的数据specific_row = read_specific_row('data.csv', 1)print("Specific row data:", specific_row)

输出

Specific row data: {'Name': 'Jane', 'Age': '25', 'City': 'San Francisco'}

在以上示例中,我们分别使用了csv.readercsv.DictReader来读取CSV文件,并通过特定的行号(索引)获取了相应的行数据。注意,行号是从0开始的,因为在Python中索引是从0开始计数。根据需要,可以调整row_number参数来读取不同的行。

5 csv 文件的特殊处理

在处理CSV文件时,有一些常见的特殊情况需要特别处理。以下是一些常见的特殊处理情况

5.1 处理包含逗号、换行符、引号的字段

        处理包含逗号、引号和换行符的CSV文件,可以使用Python的csv模块来读取和写入数据。csv模块提供了对于特殊字符的自动处理,包括将包含逗号、引号和换行符的字段用引号包裹起来,并在引号内的引号进行转义。

示例:

假设我们要处理以下包含特殊字符的CSV文件,名为data.csv

Name,Age,DescriptionJohn,30,"A software, ""guru"" with 5 years of experience. Fluent in English and Español."Jane,25,"A data analyst with ""extensive"" skills. Passionate about data visualization."Mike,35,"Project manager with experience leading international teams.Deutsch sprechen."

我们可以使用下面的代码来读取和处理这个包含特殊字符的CSV文件:

import csv# 读取包含特殊字符的CSV文件并输出内容with open('data.csv', 'r', newline='') as file:    csv_reader = csv.reader(file)    for row in csv_reader:        print(row)

输出结果

['Name', 'Age', 'Description']['John', '30', 'A software, "guru" with 5 years of experience. Fluent in English and Español.']['Jane', '25', 'A data analyst with "extensive" skills.\nPassionate about data visualization.']['Mike', '35', 'Project manager with experience leading international teams.\nDeutsch sprechen.']

        在输出结果中,我们可以看到csv.reader模块正确处理了包含逗号、引号和换行符的字段,并将其解析为正确的数据。

如果要将数据写入到包含特殊字符的CSV文件中,可以使用以下示例代码:

import csv# 要写入的数据,包含特殊字符的字段data = [    ["Name", "Age", "Description"],    ["John", 30, 'A software, "guru" with 5 years of experience. Fluent in English and Español.'],    ["Jane", 25, 'A data analyst with "extensive" skills.\nPassionate about data visualization.'],    ["Mike", 35, 'Project manager with experience leading international teams.\nDeutsch sprechen.']]# 写入CSV文件,并设置引号限定符为双引号with open('output.csv', 'w', newline='') as file:    csv_writer = csv.writer(file, quoting=csv.QUOTE_MINIMAL)    # 写入数据    csv_writer.writerows(data)print("CSV file with fields containing special characters has been created.")

        在写入数据时,我们使用csv.writer并设置引号限定符为csv.QUOTE_MINIMAL,表示只在必要时才使用引号包裹字段,确保数据的正确性。

输出文件内容:

Name,Age,DescriptionJohn,30,A software, "guru" with 5 years of experience. Fluent in English and Español.Jane,25,A data analyst with "extensive" skills.\nPassionate about data visualization.Mike,35,Project manager with experience leading international teams.\nDeutsch sprechen.

        在输出文件中,csv模块自动处理了包含特殊字符的字段,并将其写入到CSV文件中。

        在读取CSV文件时,使用csv.reader并指定适当的参数,可以正确地解析包含特殊字符的数据。在写入CSV文件时,使用csv.writer并设置合适的引号限定符,可以确保数据正确写入CSV文件。

5.2 处理非ASCII字符 

  • 在读取和写入CSV文件时,可以使用 ​encoding​参数来指定文件的编码格式。
  • CSV文件通常使用UTF-8编码来支持包含非ASCII字符的文本数据。
  • import csv# 读取包含非ASCII字符的CSV文件with open("data.csv", "r", encoding="utf-8") as file:    csv_reader = csv.reader(file)    for row in csv_reader:        print(row)# 写入包含非ASCII字符的CSV文件data = [["中文", "English"], ["数据", "Data"]]with open("data.csv", "w", newline="", encoding="utf-8") as file:    csv_writer = csv.writer(file)    csv_writer.writerows(data)

5.3 处理空字段 

  • 如果CSV文件中存在空字段,可以使用空字符串或特定的值(如"NA"或"None")表示空字段
  • 在读取CSV文件时,可以使用 ​csv.reader​的 ​skipinitialspace​参数来处理前导空格
5.3.1 读取空字段

假设我们有一个名为data.csv的CSV文件,内容如下:

Name,Age,City,DescriptionJohn,30,New York,"Software engineer with 5 years of experience. Fluent in English and Español."Jane,,San Francisco,"Data analyst with a passion for data visualization. Speaks français."Mike,35,, "Project manager with experience leading international teams. Deutsch sprechen."

注意上面的CSV文件中存在空字段。

        我们依然可以使用csv.readercsv.DictReader来读取这个包含空字段的CSV文件,并对空字段进行处理:

示例1:

import csv# 读取CSV文件并输出内容with open('data.csv', 'r', newline='') as file:    csv_reader = csv.reader(file)    for row in csv_reader:        # 处理空字段        processed_row = [field.strip() if field.strip() else None for field in row]        print(processed_row)

输出:

['Name', 'Age', 'City', 'Description']['John', '30', 'New York', 'Software engineer with 5 years of experience. Fluent in English and Español.']['Jane', None, 'San Francisco', 'Data analyst with a passion for data visualization. Speaks français.']['Mike', '35', None, 'Project manager with experience leading international teams. Deutsch sprechen.']

解释:

  1. 第一行是CSV文件的标题行,直接输出。

  2. 第二行中的Age字段为空,我们处理为空值(None)。

  3. 第三行中的City字段为空,我们处理为空值(None)。

  4. 第四行中的Description字段不为空,输出不变。

        在处理空字段时,我们使用列表推导式来遍历每一行中的字段。field.strip()用于去除字段两侧的空白字符(包括换行符、空格等),然后我们使用条件表达式来判断是否为空字段。如果字段不为空,则保持原值;如果字段为空,则将其处理为None表示空值。最终,我们得到了处理后的每一行数据。

   示例2 :  

        可以使用csv.reader来读取这个包含空字段和前导空格的CSV文件,并使用skipinitialspace=True来处理前导空格

import csv# 读取CSV文件并输出内容with open('data.csv', 'r', newline='') as file:    csv_reader = csv.reader(file, skipinitialspace=True)    for row in csv_reader:        print(row)

输出

['Name', 'Age', 'City', 'Description']['John', '30', 'New York', 'Software engineer with 5 years of experience.']['Jane', '', 'San Francisco', 'Data analyst with a passion for data visualization.']['Mike', '35', '', 'Project manager with experience leading international teams.']

        在示例中,我们使用csv.reader来读取CSV文件,并使用skipinitialspace=True来处理前导空格。结果显示,字段值前的空格已被自动去除,这样可以更好地处理包含前导空格的数据。在第二行和第三行中,字段"Age"和"City"的值包含前导空格,但在输出中已经去除了这些前导空格。

 5.3.2  指定参数处理空字段

        处理空字段在CSV文件中通常需要根据具体情况来决定。CSV文件中的空字段可以使用空字符串('')来表示,也可以使用特定的值(如"NA"或"None")来表示。在处理空字段时,需要根据数据的组织和要求来决定最合适的方式。

        在Python的csv模块中,可以使用csv.writercsv.DictWriterquoting参数来指定如何处理空字段。

处理空字段的选项:

  1. csv.QUOTE_MINIMAL(默认): 如果字段为空,字段将被写入为一个空字符串('')。在读取CSV文件时,空字符串会被解析为空值。

  2. csv.QUOTE_ALL 如果字段为空,字段将被写入为双引号包裹的空字符串("")。在读取CSV文件时,空字符串会被解析为空值。

  3. csv.QUOTE_NONNUMERIC 如果字段为空,字段将被写入为一个空字符串('')。在读取CSV文件时,空字符串会被解析为None或空值。

  4. csv.QUOTE_NONE 如果字段为空,字段将被写入为一个空字符串('')。在读取CSV文件时,空字符串会被解析为空字符串本身,而不是空值。

示例:

假设我们有一个包含空字段的CSV文件,名为data.csv,内容如下:

Name,Age,City,DescriptionJohn,30,New York,Jane,,San Francisco,"Data analyst with a passion for data visualization."Mike,35,,Project manager

我们将使用csv.writercsv.DictWriter来处理这个包含空字段的CSV文件,并演示不同选项的效果。

import csv# CSV文件处理选项quoting_options = [csv.QUOTE_MINIMAL, csv.QUOTE_ALL, csv.QUOTE_NONNUMERIC, csv.QUOTE_NONE]output_files = ['output_minimal.csv', 'output_all.csv', 'output_nonnumeric.csv', 'output_none.csv']# 处理CSV文件for quoting, output_file in zip(quoting_options, output_files):    # 要写入的数据,包含空字段    data = [        ["John", 30, "New York", ""],        ["Jane", "", "San Francisco", "Data analyst with a passion for data visualization."],        ["Mike", 35, "", "Project manager"]    ]    # 写入CSV文件    with open(output_file, 'w', newline='') as file:        csv_writer = csv.writer(file, quoting=quoting)        # 写入数据        csv_writer.writerows(data)print("CSV files with different quoting options have been created.")

        在以上示例中,我们分别使用不同的quoting选项来处理包含空字段的CSV文件,并将处理后的数据写入不同的输出文件。

      我们创建了四个输出文件,分别使用不同的quoting选项,即csv.QUOTE_MINIMALcsv.QUOTE_ALLcsv.QUOTE_NONNUMERICcsv.QUOTE_NONE。你可以查看各个输出文件,观察不同选项对于空字段的处理效果。

 结果如下

 

来源地址:https://blog.csdn.net/qq_35831906/article/details/131983330

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【100天精通python】Day27:文件与IO操作_CSV文件处理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python中文件操作与异常的处理是怎样的

本篇文章为大家展示了python中文件操作与异常的处理是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、 文件的操作1.1创建文件格式:f = open(‘文件, ‘w)或者f = open
2023-06-22

Python开发注意事项:处理文件和IO操作时的注意事项

Python作为一种功能强大且易于学习的编程语言,在开发过程中经常涉及处理文件和IO操作。然而,在处理文件和IO操作时,开发者需要注意一些重要事项,以确保代码的稳定性和可靠性。本文将就Python开发中处理文件和IO操作时的注意事项进行探讨
Python开发注意事项:处理文件和IO操作时的注意事项
2023-11-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录