使用xlwt保存含DateTime的Excel文件遇异常:文件名不全且文件为0字节
问题根源分析与解决方案
你的猜测完全没错——冒号是Windows文件系统的非法字符,这就是导致保存失败的核心原因。
为什么会出现这种异常现象?
- Windows文件名严格禁止包含以下字符:
<,>,:,",/,\,|,?,*。当你的代码尝试写入带冒号的文件名时,系统会直接截断文件名到冒号前的部分(也就是你看到的2018-02-13 14),同时因为写入操作被系统强制中断,文件内容根本没被写入,所以文件大小为0字节,扩展名也被截断丢失了。 - 移除日期时间变量后,文件名符合系统规则,Excel能完整执行写入流程,自然生成带扩展名的正常文件。
可行的解决方法
你只需要把日期时间里的冒号替换成合法字符就行,常见的替换方案有:
- 用横杠
-或下划线_替代冒号:比如把2018-02-13 14:30:25改成2018-02-13 14-30-25或2018-02-13_14_30_25 - 用点
.分隔时间部分:比如2018-02-13 14.30.25
举个简单的代码示例(以Python pandas保存Excel为例):
import pandas as pd from datetime import datetime # 获取当前时间并格式化,将冒号替换为横杠 current_time = datetime.now().strftime("%Y-%m-%d %H-%M-%S") file_name = f"{current_time}.xlsx" # 模拟数据写入 df = pd.DataFrame({"示例数据": [1, 2, 3]}) df.to_excel(file_name, index=False)
这样生成的文件名既保留了完整的日期时间信息,又符合Windows文件系统规则,就能正常保存完整的Excel文件了。
内容的提问来源于stack exchange,提问作者Doodool_Tala
相关产品推荐
相关产品推荐

