使用Pyramid导出Python Unicode CSV

1 投票
1 回答
1012 浏览
提问于 2025-04-17 17:16

我正在尝试将包含非ASCII字符的MongoDB数据导出为CSV格式。目前,我在使用Pyramid框架,并且用到了pyramid.response。

from pyramid.response import Response
from mycart.Member import Member

@view_config(context="mycart:resources.Member", name='', request_method="POST", permission = 'admin')
def member_export( context, request):
     filename = 'member-'+time.strftime("%Y%m%d%H%M%S")+".csv"
     download_path = os.getcwd() + '/MyCart/mycart/static/downloads/'+filename

     member = Members(request)

     my_list = [['First Name,Last Name']]

     record = member.get_all_member( )             
     for r in record:

         mystr = [ r['fname'],  r['lname']]

         my_list.append(mystr)

     with open(download_path, 'wb') as f:
         fileWriter = csv.writer(f, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL)
         for l in my_list:
             print(l)
             fileWriter.writerow(l)

     size = os.path.getsize(download_path)
     response = Response(content_type='application/force-download', content_disposition='attachment; filename=' + filename)
     response.app_iter = open(download_path , 'rb')
     response.content_length = size

     return response

在MongoDB中,名字显示为,我在打印的时候也能看到。但是,当我用Excel打开这个文件时,它却显示了一些乱七八糟的字符,比如ç¾…。

不过,当我在命令行中查看这个文件时

$ more member-20130227141550.csv

它能够正确显示这些非ASCII字符。

我该如何解决这个问题呢?

1 个回答

1

我对Windows不太熟悉,所以不太确定问题是出在你的代码上,还是Excel对非ASCII字符处理得不好。不过我注意到你是用Python的csv模块来写文件的,而这个模块在处理Unicode字符时常常会让人头疼。

其他用户有报告说,使用unicodecsv作为csv模块的替代品效果不错。也许你可以试试用这个模块来写csv文件,看看问题是否能得到解决。

撰写回答