Python:csv
2025/12/26大约 2 分钟
csv读取
方式一:内置 csv 模块
例
no,path,score
0,"['""灵吉菩萨""', '""孙悟空""', '""小鼍龙""', '""龙王""']",1.0
1,"['""徒弟""', '""孙悟空""', '""小鼍龙""', '""龙王""']",1.0
2,"['""乌鸡国王""', '""孙悟空""', '""小鼍龙""', '""龙王""']",1.0import csv
import ast
filename = 'data.csv'
with open(filename, mode='r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
# 将字符串转换为列表
path_list = ast.literal_eval(row['path'])
print(f"编号: {row['no']}")
print(f"路径: {path_list}")
print(f"分数: {row['score']}")
print("-" * 20)方式二:pandas
风格1
import pandas as pd
import ast
# 1. 读取 CSV 文件
# 如果你的文件名是 'data.csv'
df = pd.read_csv('data.csv')
# 2. 将 'path' 列从字符串转换为真正的 Python 列表对象
# 因为 read_csv 会把 ['A', 'B'] 读成一个长字符串
df['path'] = df['path'].apply(ast.literal_eval)
# 3. 打印结果
print("--- 数据类型 ---")
print(df.dtypes)
print("\n--- 数据内容 ---")
print(df)
# 访问某一行具体的路径
print("\n第一行的路径列表:", df.loc[0, 'path'])
print("路径中的第一个元素:", df.loc[0, 'path'][0])风格2
import pandas as pd
import ast
# 在读取的同时,直接告诉 pandas:'path' 这一列要用 ast.literal_eval 处理
df = pd.read_csv('data.csv', converters={'path': ast.literal_eval})
# 现在 df['path'] 已经是真正的列表了
print(df['path'].iloc[0][1]) # 直接访问列表中间的元素csv存储
方式一:内置 csv 模块
列表
import csv
rows = [
["id", "name", "score"],
[1, "Alice", 95],
[2, "Bob", 88],
[3, "Charlie", 92],
]
with open("output.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerows(rows)
print("CSV 写入完成")说明:
newline="":必须,否则 Windows 下会多空行encoding="utf-8":防止中文乱码
字典
import csv
data = [
{"id": 1, "name": "Alice", "score": 95},
{"id": 2, "name": "Bob", "score": 88},
{"id": 3, "name": "Charlie", "score": 92},
]
fieldnames = ["id", "name", "score"]
with open("output.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
print("CSV 写入完成")方式二:pandas
如果后面还要做分析、排序、统计,这个更舒服。
import pandas as pd
data = [
{"id": 1, "name": "Alice", "score": 95},
{"id": 2, "name": "Bob", "score": 88},
{"id": 3, "name": "Charlie", "score": 92},
]
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False, encoding="utf-8")
print("CSV 写入完成")常见坑
| 问题 | 正确做法 |
|---|---|
| 多空行 | open(..., newline="") |
| 中文乱码 | encoding="utf-8" 或 Excel 用 utf-8-sig |
| Excel 打开乱码 | encoding="utf-8-sig" |
| 覆盖写 | 用 "w" |
| 追加写 | 用 "a" |
更新日志
2026/3/12 10:59
查看所有更新日志
1b982-于72fda-于25785-于95b1c-于71b31-于
