Python从0到100(二十二):用Python读写CSV文件-LMLPHP

一、CSV文件概述

CSV,即逗号分隔值(Comma Separated Values),是一种以纯文本形式存储表格数据的通用格式。它因其简洁和易于使用而广泛应用于数据交换,如在数据库、电子表格等应用程序中导入和导出数据。CSV文件的纯文本特性使其与操作系统和编程语言无关,大多数编程语言都提供了处理CSV文件的功能,使其在数据处理和科学领域中极为流行。

CSV文件的主要特点包括:

  1. 纯文本格式:使用特定字符集(如ASCII、Unicode、GB2312等);
  2. 记录组成:由多条记录构成,通常每行代表一条记录;
  3. 字段分隔:记录内的字段(列)通过分隔符(如逗号、分号、制表符)分隔;
  4. 字段序列一致:所有记录具有相同的字段顺序。

CSV文件不仅可用文本编辑器查看和编辑,还能在如Excel这样的电子表格软件中打开,几乎与原生电子表格文件无异。数据库系统通常支持将数据导出为CSV格式,也支持从CSV文件导入数据。

二、将数据写入CSV

假设我们需要将五个学生的三门课程成绩保存到CSV文件中。在Python中,我们可以使用内置的csv模块来实现。csv模块的writer对象允许我们通过writerowwriterows方法将数据写入CSV文件。以下是实现的示例代码:

import csv
import random

# 打开文件用于写入,'w'模式表示写入,如果文件不存在则创建
with open('scores.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    # 写入表头
    writer.writerow(['姓名', '语文', '数学', '英语'])
    # 学生姓名列表
    names = ['关羽', '张飞', '赵云', '马超', '黄忠']
    for name in names:
        # 为每个学生生成三门课程的随机分数,并插入姓名
        scores = [random.randint(50, 100) for _ in range(3)]
        scores.insert(0, name)
        # 写入一行数据
        writer.writerow(scores)

执行上述代码后,生成的CSV文件内容示例:

姓名,语文,数学,英语
关羽,98,86,61
张飞,86,58,80
赵云,95,73,70
马超,83,97,55
黄忠,61,54,87

csv.writer函数还允许我们通过dialect参数指定CSV的方言,默认为excel。我们也可以通过delimiterquotecharquoting参数自定义分隔符、引用字符和引用方式。例如,当字段中包含特殊字符时,使用引用字符可以避免歧义。以下是对csv.writer的一个简单自定义示例:

# 使用竖线作为分隔符,并设置所有字段都被引用
writer = csv.writer(file, delimiter='|', quoting=csv.QUOTE_ALL)

使用自定义设置生成的CSV文件内容示例:

"姓名"|"语文"|"数学"|"英语"
"关羽"|"98"|"86"|"61"
"张飞"|"86"|"58"|"80"

三、从CSV文件读取数据

要读取CSV文件中的数据,我们可以使用csv.reader对象,它是一个迭代器,允许我们通过next方法或for-in循环来获取数据。以下是读取CSV文件的示例代码:

import csv

# 打开文件用于读取,'r'模式表示读取
with open('scores.csv', 'r', encoding='utf-8') as file:
    reader = csv.reader(file, delimiter='|')
    # 遍历CSV文件中的每一行
    for line_num, data_list in enumerate(reader, start=1):
        print(f"行号: {line_num}\t", end='')
        for elem in data_list:
            print(f"{elem}\t", end='')
        print()  # 换行

注意:在对csv.reader对象进行for循环时,每次迭代会得到一个包含该行所有字段的列表。

四、小结

在Python数据分析领域,pandas库是一个强大的工具。它提供了read_csvto_csv函数,用于简化CSV文件的读写操作。read_csv函数可以将CSV数据读取为DataFrame对象,而DataFramepandas中用于数据处理的核心数据结构,它包含了丰富的数据处理功能,如数据清洗、转换和聚合等。相对地,to_csv函数可以将DataFrame对象中的数据导出到CSV文件中,实现数据的持久化存储。这些函数相比原生的csv.readercsv.writer提供了更高级的功能和更好的易用性。

05-14 16:02