字典内容写入csv文件
时间: 2025-07-01 14:05:26 浏览: 6
在 Python 中,可以使用 `csv` 模块将字典内容写入 CSV 文件。以下是详细步骤和示例代码:
---
### **方法 1:使用 `csv.DictWriter`(推荐)**
`DictWriter` 可以直接根据字典的键(key)写入 CSV 文件的表头(header)和行数据。
#### **示例代码**
```python
import csv
# 示例字典列表(每个字典代表一行数据)
data = [
{"姓名": "张三", "年龄": 25, "城市": "北京"},
{"姓名": "李四", "年龄": 30, "城市": "上海"},
{"姓名": "王五", "年龄": 28, "城市": "广州"}
]
# 写入 CSV 文件
with open('output.csv', 'w', newline='', encoding='utf-8-sig') as f:
# 定义表头(取字典的键)
fieldnames = ['姓名', '年龄', '城市']
writer = csv.DictWriter(f, fieldnames=fieldnames)
# 写入表头
writer.writeheader()
# 写入数据行
writer.writerows(data)
print("CSV 文件已保存!")
```
#### **关键点**
1. `newline=''` 避免在 Windows 下出现空行。
2. `encoding='utf-8-sig'` 支持中文并兼容 Excel。
3. `writer.writeheader()` 写入表头(字典的键)。
4. `writer.writerows(data)` 批量写入字典列表。
---
### **方法 2:使用 `csv.writer`(手动处理键值)**
如果字典的键不固定,可以手动提取键和值:
#### **示例代码**
```python
import csv
data = [
{"姓名": "张三", "年龄": 25, "城市": "北京"},
{"姓名": "李四", "年龄": 30, "城市": "上海"}
]
with open('output.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
# 写入表头(取第一个字典的键)
if data:
writer.writerow(data[0].keys())
# 写入数据行
for row in data:
writer.writerow(row.values())
print("CSV 文件已保存!")
```
#### **适用场景**
- 字典的键可能动态变化。
- 需要更灵活地控制写入逻辑。
---
### **处理特殊情况**
1. **字段缺失**
如果某些字典缺少字段,可以用 `dict.get()` 设置默认值:
```python
dit = {
'评论内容': comment.get('commentInfo', {}).get('commentData', '无'),
'评论时间': comment.get('commentInfo', {}).get('commentDate', '未知')
}
```
2. **数据清洗**
去除换行符、逗号等可能影响 CSV 格式的字符:
```python
import re
text = re.sub(r'[\n\r,]', ' ', raw_text)
```
3. **追加模式**
如果需要追加到现有 CSV 文件,使用 `'a'` 模式:
```python
with open('output.csv', 'a', newline='', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writerow(new_data)
```
---
### **完整示例(结合京东评论爬取)**
```python
import csv
import json
# 假设这是爬取的评论数据(字典列表)
comments = [
{"评论内容": "很好用", "评论时间": "2023-01-01", "用户评分": 5, "商品id": "123"},
{"评论内容": "一般般", "评论时间": "2023-01-02", "用户评分": 3, "商品id": "123"}
]
# 保存到 CSV
with open('jd_comments.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=comments[0].keys())
writer.writeheader()
writer.writerows(comments)
print("评论数据已保存为 jd_comments.csv")
```
---
### **相关问题**
1. 如何将嵌套字典(如 `{"用户": {"姓名": "张三", "年龄": 25}}`)展平后写入 CSV?
2. 如果字典的键包含中文或特殊字符,需要注意什么?
3. 如何用 Pandas 库替代 `csv` 模块实现更复杂的 CSV 操作?
4. 写入 CSV 时如何避免科学计数法(如长数字被转为 `1E+10`)?
5. 如何读取 CSV 文件并转换回字典列表?
阅读全文
相关推荐













