2016-02-15 2 views
0

Я прикрепляю файл csv и отправляю его как электронное письмо. Тот же код работает для моих других кодов, но в этом странном случае он обрезает данные в csv. Фактическое значение csv равно 11 kb, но привязка составляет 8 kb. Фактический файл имеет 1400+ строк, где в качестве вложения только 1100 строк.fp.read не читает весь файл csv

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

Предлагаем вам найти место _exact_, где csv-файл усекается и просматривает данные там, чтобы узнать, есть ли что-то необычное в нем. По умолчанию '_charset' для MIMEText является' us-ascii', поэтому любые символы вне этого диапазона могут быть причиной. – martineau

+0

fp.read() должен читать все это, если что-то не останавливает его, поэтому, вероятно, MIMEText останавливает чтение. Могут быть всевозможные вещи. Попытайтесь разделить чтение и преобразование в MIMEText на отдельные строки и посмотреть, что произойдет. –

+0

Независимо от того, какие данные находятся в файле, он усекает ровно с размером 8192, а фактический размер файла - 11523. Файл просто содержит в нем номера ячеек, другие данные или специальные символы. –

ответ

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 или этот вопрос, вероятно, будет закрыта, так как в то время как аналогичные вопросы могут быть по-теме здесь, поскольку в настоящее время заявлено, что это вряд ли поможет будущим читателям.

+0

Я пробовал, но результат остался таким же. Независимо от того, какие данные находятся в файле, он усекает ровно с размером 8192, а фактический размер файла - 11523. Файл имеет только номера ячеек, никаких других данных. –

+0

Можете ли вы поделиться файлом, чтобы мы могли попытаться воспроизвести проблему? –

+0

Вот файл - https://drive.google.com/file/d/0B24sIrlQP0JsQjNSQ1BYaklMOXc/view?usp=sharing Он усекает при –

Смежные вопросы