Appearance
CSV操作
csv与excel类似,但csv只专注数据本身
提示
学习前,请复制以下内容,自行创建一个student.csv文件,粘贴内容并保存
id,name,age,score
1,张三,18,90
2,李四,17,85
3,王五,18,92
4,赵六,16,70| id | name | age | score |
|---|---|---|---|
| 1 | 张三 | 18 | 90 |
| 2 | 李四 | 17 | 85 |
| 3 | 王五 | 18 | 92 |
| 4 | 赵六 | 16 | 70 |
观察这个表格,它有4列5行(含表头)
读入csv并打印表内容
提示
每次使用csv时,需要导入csv库
py
import csvpy
with open(文件路径, 模式, encoding=文件编码) as 写入变量:文件名: 我们需要操作的文件路径
模式:
| 模式 | 解释 | 作用 |
|---|---|---|
| "r" | read | 只读 |
| "w" | write | 写入(会删除原有的内容,写入全新内容) |
| "a" | append | 追加(不会删除原有内容,只会在尾部添加内容) |
文件编码: 默认utf-8
写入变量: 用什么变量存储读入的内容
打开与关闭
py
file = open("students.csv","r",encoding="utf-8")
print(file.read())
file.close()自动关闭(推荐)
py
with open("students.csv","r",encoding="utf-8") as f:
print(f.read())按行读取
py
with open("students.csv","r",encoding="utf-8") as f:
reader = csv.reader(f) #将读取到的内容写入 reader
next(reader) #跳过一行(这里指的是表头)
for row in reader:
print(row)打印结果
shell
['1', '张三', '18', '90']
['2', '李四', '17', '85']
['3', '王五', '18', '92']
['4', '赵六', '16', '70']按列读取 DictReader
py
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["name"], row["score"])打印结果
shell
张三 90
李四 85
王五 92
赵六 70特殊处理
数值处理
在读入csv时,若某个内容是数值的,那么需要转为对应的数据类型
例如: 这里的成绩是整数的,在使用数值操作前需要转为数值
计算所有学生的成绩的和
py
import csv
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
total_score = 0
for row in reader:
score = int(row["score"])
total_score += score
print("总成绩:", total_score) # 总成绩: 337在这里,第7行的内容中,使用了int()将其转为int类型,当然也可以使用float()
练习题
打印已成年学生的姓名和成绩
点我查看答案
py
import csv
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
age = int(row["age"])
if age >= 18:
print(f"姓名:{row['name']},成绩:{row['score']}")计算所有学生的成绩平均分
点我查看答案
py
import csv
total = 0
count = 0
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
score = int(row["score"])
total += score
count += 1
avg = total / count
print(f"平均分:{avg:.2f}")只打印成绩大于等于 90 的学生
点我查看答案
py
import csv
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
if int(row["score"]) >= 90:
print(row)单独打印出所有学生的姓名
点我查看答案
py
import csv
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["name"])