fp.read没有读取整个csv文件

时间:2016-02-15 17:09:22

标签: python csv email-attachments

我正在附加一个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()),但我无法找到解决方案。

1 个答案:

答案 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或者此问题可能会被关闭,因为虽然类似的问题可能会出现在主题上,但正如目前所述,这个问题不太可能帮助未来的读者。