Python写入CSV文件时如何为文本添加填充?
解决CSV写入时的文本格式化问题
嘿,我明白你在把考勤数据写入CSV时遇到格式化的麻烦了——别慌,咱们用Python的标准csv模块就能轻松搞定,而且能让输出的CSV既规整又符合需求。
先看看你的考勤数据结构:是一个字典列表,每个字典对应一个学生的考勤记录,包含姓名、学号和日期考勤状态。你可能遇到的格式化需求大概是这几种:列文本对齐、修复截断的字段(比如你示例里的FIRST_NAME_3 LAST_NAM...)、统一考勤状态的显示格式,对吧?
下面给你分步解决的方案:
1. 先修复数据中的截断字段
如果你的原始数据里有像FIRST_NAME_3 LAST_NAM...这种截断的名字,先在写入前补全或者处理好,避免写入不完整的内容:
# 补全截断的字段,确保数据完整 attendance = [ {'NAME': 'FIRST_NAME_1 LAST_NAME_1', 'ROLL NUMBER': '1XXXXXXXXX', '29/04/2018': 'PRESENT', '30/04/2018': 'ABSENT', '01/05/2018': 'PRESENT'}, {'NAME': 'FIRST_NAME_2 LAST_NAME_2', 'ROLL NUMBER': '2XXXXXXXXX', '29/04/2018': 'PRESENT', '30/04/2018': 'PRESENT', '01/05/2018': 'PRESENT'}, {'NAME': 'FIRST_NAME_3 LAST_NAME_3', 'ROLL NUMBER': '3XXXXXXXXX', '29/04/2018': 'ABSENT', '30/04/2018': 'ABSENT', '01/05/2018': 'PRESENT'} ]
2. 用csv.DictWriter写入并格式化文本
csv.DictWriter是处理字典列表数据的绝佳工具,它能自动匹配表头和字段,还能配合字符串格式化方法让输出更规整:
import csv output_file = 'file.csv' # 从第一个字典中提取所有字段名作为CSV表头 fieldnames = attendance[0].keys() with open(output_file, 'w', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=fieldnames) # 先写入表头 writer.writeheader() # 逐行处理并写入数据 for record in attendance: # 姓名左对齐,固定30字符宽度,不足用空格填充(纯文本下更整齐) formatted_name = record['NAME'].ljust(30) # 学号右对齐,固定12字符宽度,方便对齐查看 formatted_roll = record['ROLL NUMBER'].rjust(12) # 考勤状态统一大写(可选,确保格式一致) formatted_attendance = { date: status.upper() for date, status in record.items() if date not in ['NAME', 'ROLL NUMBER'] } # 组装格式化后的记录 formatted_record = { 'NAME': formatted_name, 'ROLL NUMBER': formatted_roll, **formatted_attendance } writer.writerow(formatted_record)
关键格式化技巧说明
- 文本对齐:用
ljust()(左对齐)、rjust()(右对齐)或center()(居中)固定字段宽度,这样不管是用文本编辑器还是Excel打开CSV,列都会更整齐。 - 统一格式:比如把考勤状态统一为大写/小写,避免出现
Present、present这种不一致的写法。 - 自动处理特殊字符:如果你的姓名里包含逗号、引号等特殊字符,
csv模块会自动用引号包裹字段,不用担心CSV分隔符混乱的问题。
如果需要自定义分隔符(比如用制表符代替逗号),只需要在初始化DictWriter时加上delimiter='\t'参数就行。
内容的提问来源于stack exchange,提问作者Aadit
相关产品推荐
相关产品推荐

