python csv 模块(4)
·
目录
(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)
更多推荐










所有评论(0)