目录

一、python csv 模块介绍。

二、python csv 模块入门。

(1)csv.reader 读。

(2)csv.DictReader 读。

(3)csv.writer 写。

(4)csv.DictWriter 写。

(5)读DictReader→处理→写DictWriter。


一、python csv 模块介绍。

  • CSV(Comma-Separated Values)文件是一种常见的文件格式,用于存储表格数据。

  • CSV 文件由纯文本组成,每一行代表表格中的一行数据,而每一列则通过逗号(或其他分隔符)分隔。CSV 文件通常用于数据交换,因为它简单且易于处理。


  • python的 CSV 模块是处理 CSV 文件的内置标准库(无需额外安装)。其功能简洁,适合快速实现 CSV 的读写操作。

  • csv 模块的核心是通过 读取器(reader) 读取 CSV 内容,通过 写入器(writer) 写入内容。还提供了更方便的 字典式读写器(DictReader/DictWriter)

二、python csv 模块入门。

(1)csv.reader 读。
  • csv.reader按列表返回每行数据
  • csv.reader 适合无表头或表头简单的场景,缺点是需要记字段索引

  • products.csv 文件。(手动创建)


  • csv直接import。使用 csv.reader(file文件流)创建reader对象。
  • csv读出来默认是字符串。
  • python 用 with 语句自动管理文件关闭,等价于 Java 的 try-with-resource
#使用csv.reader读取
import csv

#with 资源用完自动释放
with open("products.csv",mode="r",encoding="utf-8") as file:
    csv_reader = csv.reader(file)

    #读表头
    #next迭代读取下一行
    headers = next(csv_reader)
    print("表头:",headers)

    #遍历剩余行
    for row in csv_reader:  #每行是一个列表
        product_id = row[0]
        product_name = row[1]
        print(type(row[2]))  #默认读取的所有值都是字符串类型  #<class 'str'>
        # 转数字必须手动转换数据类型
        price = float(row[2])
        print(f"ID: {product_id}, 名称: {product_name}, 价格: {price}")

(2)csv.DictReader 读。
  • csv.DictReader 按字典返回每行数据
  • csv.DictReader 适合有表头的 CSV,代码可读性高(且不用记索引)。

  • csv.DictReader 读取是按字段名访问,且自动将第一行作为表头(键),同样需要手动转换类型。
import csv

with open('products.csv',mode="r",encoding="utf-8") as file:
    #自动将第一行作为表头
    csv_dict_reader = csv.DictReader(file)

    #遍历剩余行
    for row in csv_dict_reader:
        print(row)  #每一行都是字典 #{'id': '1', 'name': '笔记本电脑', 'price': '5999.99'}
        #通过字段名访问
        product_id = row['id']
        product_name = row['name']
        price = float(row['price'])
        print(f"ID: {product_id}, 名称: {product_name}, 价格: {price}")

(3)csv.writer 写。
  • csv.writer 按列表写入每行数据
  • newline="" 是关键参数,用于避免在 Windows 系统中出现空行。
  • writerow() 写入单行,writerows() 写入多行(参数是列表的列表)。
import csv

#需写入的数据
data = [
    ["id","name","price","discount_price"],  #表头
    ["1","笔记本电脑","5999.99","4999.99"],
    ["2","手机","3999","3599"]
]

#文件打开模式mode,用来指定文件的操作方式
#w:写入模式
#w模式下,若不存在文件,会自动创建
with open('discounted_products.csv',mode="w",encoding="utf-8",newline="") as f:
    csv_writer = csv.writer(f)

    #写入多行
    csv_writer.writerows(data)
    print("写入完成")


(4)csv.DictWriter 写。
  • csv.DictWriter 按字典写入每行数据(必须指定表头)。
  • DictWriter 必须通过 fieldnames 指定表头,否则无法写入。
  • DictWriter 写入时,只关注 fieldnames 中定义的字段顺序。无论传入的字典中键的顺序如何,都会严格按照 fieldnames 的顺序写入对应的值。
import csv

#定义表头
headers = ["p_id","name","price","discount_price"]

#需写入的数据
#列表嵌套字典
#无论传入的字典中键的顺序,都会严格按照 fieldnames 的顺序写入对应的值
#fieldnames 即指定的headers表头
data = [
    {"name": "笔记本","p_id": "1","price": "5999", "discount_price": "5499"},
    {"p_id": "2", "name": "手机", "price": "3999", "discount_price": "3599"},
    {"p_id": "3", "name": "手环", "discount_price": "199", "price": "299"}
]

with open("discounted_products.csv",mode="w",encoding="utf-8",newline="") as f:
    csv_dict_writer = csv.DictWriter(f,fieldnames=headers)  #fieldnames指定表头

    #先写入表头
    #必须手动调用
    csv_dict_writer.writeheader()

    #写入多行数据
    csv_dict_writer.writerows(data)
    print("写入完成")

(5)读DictReader→处理→写DictWriter。
  • 使用输入读取器DictReader、输出写入器DictWriter。
  • 读取指定csv文件的数据,循环处理数据后,依次写入到指定csv文件。
import csv

#输入文件
input_file = "products.csv"
#输出文件
output_file = "discounted_products.csv"
#输出表头
headers = ["id","name","original_price","discount_price"]

#读取并写入
with (
    open(input_file,mode="r",encoding="utf-8") as i_file,
    open(output_file,mode="w",encoding="utf-8",newline="") as o_file
):
    #输入读取器
    read = csv.DictReader(i_file)
    #输出写入器
    write = csv.DictWriter(o_file,fieldnames=headers)
    #写入表头
    write.writeheader()

    #遍历输入
    for row in read:
        pid = row["id"]
        name = row["name"]
        original_price = float(row["price"])
        #折扣9折
        discount_price = round(original_price * 0.9,2)  #保留两位小数

        #构造写入行(字典)
        output_row = {
            "id": pid,
            "name": name,
            "original_price": original_price,
            "discount_price": discount_price
        }
        #一行一行写入
        write.writerow(output_row)
print("处理完成,结果已写入:",output_file)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐