首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的charmap编解码器不能用gzipped文件解码字节错误

python中的charmap编解码器不能用gzipped文件解码字节错误
EN

Stack Overflow用户
提问于 2019-04-29 21:46:23
回答 1查看 309关注 0票数 0

我试图用python发送一封电子邮件,其中包含gzip格式的文件作为附件。

但是当我试图发送文件时,我得到了一个错误。这是我得到的例外:

代码语言:javascript
复制
Exception:  'charmap' codec can't decode byte 0x90 in position 75: character maps to <undefined>

这就是我在代码中所做的:

代码语言:javascript
复制
import gzip
destination = 'path/to/file'
to_addr = input("Enter the recipient's email address: ")
from_addr = 'cloudops@noreply.company.com'
subject = "Commpany AWS Billing Info "
content = "email to the user about the file"
msg = MIMEMultipart()
msg['From'] = from_addr
msg['To'] = to_addr
msg['Subject'] = subject
body = MIMEText(content, 'html')
msg.attach(body)
server = smtplib.SMTP('smtpout.us.companyworld.company.com', 25)
filename = destination
try:
    with open(filename, 'r') as f:
        part = MIMEApplication(f.read(), Name=basename(filename))
        part['Content-Disposition'] = 'attachment; filename="{}"'.format(basename(filename))
        msg.attach(part)
        server.send_message(msg, from_addr=from_addr, to_addrs=[to_addr])
    print("Email was sent to: %s" %  to_addr)
except Exception as e:
    print("Exception: ", e)
    print("Email was not sent.")

我试图发送的文件是在以下几行的另一个函数中创建的:

代码语言:javascript
复制
    import pandas
    read_sql = 'select * from somedb'
    mydb = mysql.connector.connect(user='x', password='x',host='x',database='aws_bill')
    results = pandas.read_sql_query(read_sql, mydb)
    results.to_csv(destination, index=False, encoding='utf8', compression='gzip')

我如何纠正这个问题并发送附件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-30 06:27:32

问题是这条线:

代码语言:javascript
复制
with open(filename, 'r') as f:

您正在以文本模式打开this文件,因此Python试图对其进行解码;应该以二进制模式打开this文件,如下所示:

代码语言:javascript
复制
with open(filename, 'rb') as f:
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55911230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档