如何在Python中将datetime对象写入CSV文件?
我来帮你解决这个问题!你遇到的两个报错其实都是因为datetime.datetime对象不能直接按字符串的方式处理导致的,咱们一步步来搞定:
首先看第一个报错:'datetime.datetime' object has no attribute 'encode'——这很正常,因为encode是字符串专属的方法,datetime本身不是字符串,自然没有这个属性。
第二个报错TypeError: 'datetime.datetime' object is not callable,大概率是你代码里不小心把某个变量命名成了datetime,覆盖了标准库的datetime模块名,导致后续调用出问题,这个后面可以检查下变量名,先解决写入的核心问题。
正确的处理方式:把datetime转成字符串再写入
CSV Writer只能处理可序列化的类型(比如字符串、数字),所以我们需要先把datetime对象转换成字符串格式,有两种常用方式:
1. 自定义日期时间格式(推荐)
用datetime对象的strftime方法,你可以完全控制输出的格式,比如:
# 按"年-月-日 时:分:秒"的格式输出 csvWriter.writerow([tweet.created_at.strftime('%Y-%m-%d %H:%M:%S'), tweet.user.name.encode('utf-8')])
你可以根据需求调整格式字符串,比如只保留日期用'%Y-%m-%d',如果你的datetime带时区信息,也可以添加对应的格式符。
2. 直接转成默认字符串格式
如果不需要自定义格式,直接用str()把datetime转成字符串就行:
csvWriter.writerow([str(tweet.created_at), tweet.user.name.encode('utf-8')])
这种方式会输出Python默认的datetime字符串,比如2024-05-20 15:30:45,也能满足大部分场景。
另外提一句,如果你用的是Python 3,其实tweet.user.name可能不需要手动encode('utf-8'),因为CSV Writer在Python 3里默认处理字符串,直接写tweet.user.name会更简洁。
内容的提问来源于stack exchange,提问作者ahmad iqbal

