处理数据是编程中不可避免的一部分,作为一个经常发现自己深陷各种文件格式的人,我一直很欣赏 Python 如何简化整个过程。
CSV 文件是一种经常出现的文件格式,特别是在数据分析中。
CSV(即逗号分隔值)由于其简单性而成为一种流行的数据交换格式。
幸运的是,Python 附带了一个名为 csv 的内置模块,这使得处理这些文件变得非常高效。
在本文中,我将详细介绍 csv 模块在 Python 中的工作原理,从基本用法到更高级的技术,这些技术可以在处理数据时节省大量时间。
在深入研究 csv 模块之前,让我们首先对 CSV 文件是什么有一个基本的了解。
CSV 文件本质上是一个纯文本文件,其中每一行代表一行数据,每个值由逗号(或有时是制表符等其他分隔符)分隔。
这是一个简单的示例:
Name,Age,Occupation Alice,30,Engineer Bob,25,Data Scientist Charlie,35,Teacher
您可能想知道为什么需要 csv 模块,因为 CSV 文件只是理论上可以使用 Python 标准文件处理方法读取的文本文件。
虽然这是事实,但 CSV 文件可能具有复杂性,例如嵌入的逗号、单元格内的换行符以及不同的分隔符,这些复杂性很难手动处理。
csv 模块抽象了所有这些,让您专注于数据。
让我们进入代码。
对 CSV 文件执行的最常见操作是读取其内容。
模块中的 csv.reader() 函数是一个易于使用的工具。
这是有关如何执行此操作的分步指南。
基本 CSV 读取
import csv # Open a CSV file with open('example.csv', 'r') as file: reader = csv.reader(file) # Iterate over the rows for row in reader: print(row)
这是读取 CSV 文件的最简单方法。
csv.reader() 返回一个可迭代对象,其中每次迭代都会为您提供一个表示文件行的列表。
处理标头
大多数 CSV 文件的第一行都带有标题,例如列名称。
如果不需要这些标题,则可以在迭代时简单地跳过第一行:
import csv with open('example.csv', 'r') as file: reader = csv.reader(file) # Skip header next(reader) for row in reader: print(row)
有时,我处理的文件包含有用和不相关的数据,我发现自己跳过的行不仅仅是基于标题。
您可以在 for 循环中轻松完成此操作。
DictReader:更直观的读取 CSV 文件的方式
如果您的 CSV 文件有标题,则 csv.DictReader() 是另一个很棒的选项,它将每一行作为字典读取,键是列名称:
import csv with open('example.csv', 'r') as file: reader = csv.DictReader(file) for row in reader: print(row)
这种方法可以使您的代码更具可读性和直观性,特别是在处理大型数据集时。
例如,访问 row['Name'] 感觉比处理像 row[0].
这样基于索引的访问要清晰得多读取并处理数据后,您可能会想要保存或导出它。
csv.writer() 函数是写入 CSV 文件的首选工具。
基本 CSV 编写
import csv # Data to be written data = [ ['Name', 'Age', 'Occupation'], ['Alice', 30, 'Engineer'], ['Bob', 25, 'Data Scientist'], ['Charlie', 35, 'Teacher'] ] # Open a file in write mode with open('output.csv', 'w', newline='') as file: writer = csv.writer(file) # Write data to the file writer.writerows(data)
writer.writerows() 函数获取一个列表列表并将它们写入 CSV 文件,其中每个内部列表代表一行数据。
DictWriter:编写 CSV 文件的更简洁方法
正如我们使用 DictReader 将 CSV 文件读入字典一样,我们也使用 DictWriter 将字典写入 CSV。
当您想要显式指定列名称时,此方法特别方便。
import csv # Data as list of dictionaries data = [ {'Name': 'Alice', 'Age': 30, 'Occupation': 'Engineer'}, {'Name': 'Bob', 'Age': 25, 'Occupation': 'Data Scientist'}, {'Name': 'Charlie', 'Age': 35, 'Occupation': 'Teacher'} ] # Open file for writing with open('output.csv', 'w', newline='') as file: fieldnames = ['Name', 'Age', 'Occupation'] writer = csv.DictWriter(file, fieldnames=fieldnames) # Write the header writer.writeheader() # Write the data writer.writerows(data)
使用 DictWriter,您可以获得一个漂亮、干净的界面来将字典写入 CSV,同时保持代码的可读性和简洁性。
默认情况下,CSV 模块使用逗号分隔值,但有时您可能正在处理使用其他分隔符(例如制表符或分号)的文件。
csv 模块通过指定分隔符参数提供了一种简单的方法来处理这些情况。
import csv with open('example_tab.csv', 'r') as file: reader = csv.reader(file, delimiter='\t') for row in reader: print(row)
我遇到过使用分号而不是逗号的 CSV 文件(通常来自欧洲来源),令人欣慰的是,Python 的 csv 模块可以轻松处理此问题。
无论是逗号、制表符还是任何其他分隔符,csv 模块都能满足您的要求。
如果您的数据在字段、引号甚至换行符中包含逗号怎么办?
CSV 模块通过使用引用机制自动处理此类情况。
您还可以使用 quoting 参数控制引用的工作方式。
import csv data = [ ['Name', 'Occupation', 'Description'], ['Alice', 'Engineer', 'Works on, "cutting-edge" technology'], ['Bob', 'Data Scientist', 'Loves analyzing data.'] ] with open('complex.csv', 'w', newline='') as file: writer = csv.writer(file, quoting=csv.QUOTE_ALL) writer.writerows(data)
在此示例中,QUOTE_ALL 确保每个字段都用引号引起来。
其他引用选项包括 csv.QUOTE_MINIMAL、csv.QUOTE_NONNUMERIC 和 csv.QUOTE_NONE,让您可以完全控制 CSV 数据的格式。
多年来,我开始依赖 CSV 格式作为一种轻量级、高效的数据移动方式,而 Python 的 csv 模块一直是这段旅程中值得信赖的伴侣。
无论您是处理简单的电子表格还是复杂的多行数据字段,该模块都使该过程变得直观且轻松。
虽然使用 CSV 乍一看似乎是一项平凡的任务,但它是掌握数据操作的门户。
根据我的经验,一旦您掌握了 CSV,您就会发现自己可以自信地处理更大、更复杂的格式,例如 JSON 或 SQL 数据库。毕竟,一切都是从基础开始的。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3