我正在附加一个csv文件并将其作为电子邮件发送。相同的代码一直在为我的其他代码工作,但在这种奇怪的情况下它会截断csv中的数据。实际csv为11 kb,但附件为8 kb。实际文件有1400多行,其中附件只有大约1100行。
fp = open(path)
msg1 = MIMEText(fp.read())
print os.path.getsize(path)
attachment = msg1.add_header('Content-Disposition', 'attachment', filename=name)
msg.attach(msg1)
print "Attached " + name
fp.close()
问题出在这行代码中 - msg1 = MIMEText(fp.read())
,但我无法找到解决方案。
答案 0 :(得分:0)
如果没有原始文件,我们无法重现您的问题,所以这只是猜测。
open('file_path')
的默认行为是以文本模式打开文件。如果您的CSV包含EOF(文件结束)字符,则fp.read()
方法可能无法在某些平台中返回整个文件。
尝试以二进制模式打开CSV:
fp = open(path, 'rb')
[编辑]
我无法重现您的问题。
>>> mt = MIMEText(open('/tmp/test_file.csv').read())
>>> len(mt.as_string().split('\n'))
1165
这与原始文件的行数加上MIME标题完全相同:
$ wc -l /tmp/test_file.csv
1160 /tmp/test_file.csv
请确认并仔细检查the shortest program necessary to reproduce the problem或者此问题可能会被关闭,因为虽然类似的问题可能会出现在主题上,但正如目前所述,这个问题不太可能帮助未来的读者。