V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lbfeng
V2EX  ›  Flask

下载 csv 文件

  •  
  •   lbfeng · 2016-06-07 22:46:00 +08:00 · 6313 次点击
    这是一个创建于 3095 天前的主题,其中的信息可能已经有所发展或是发生改变。

    生成一个 csv 字符串返回给用户下载,用 excel 打开。

    # string 个数动态
    csv_file = string_1 + ',' + string_2 + ',' + string_3 + ... + '\n'
    response = Response(cvs_file, mimetype='text/csv', headers={'Content-disposition': 'attachment; filename=file_name+'.csv'})
    return response
    

    当前遇到的问题是当 string 中有逗号是,逗号后的字符会被当成下一列的内容。每个 string 都加双引号的话没有逗号的 string 在 excel 会显示引号。怎么才能每个 string 在各自的列呢?

    当 string 里有中文时, excel 打开会有乱码,转成 utf-8 也没用。

    第 1 条附言  ·  2016-06-08 00:40:07 +08:00

    格式的问题解决了。

    import csv, cStringIO
    data = [
        ['c1', 'c2', 'c3'],
        ['1', '2', '3'],
        ['1,1', '2,2', '3,3']
    ]
    
    csv_str = cStringIO.StringIO()
    write = csv.writer(csv_str, dialect='excel')
    for d in data:
        write.writerow(d)
    

    csv文件在mac下的microsoft excel打开中文是乱码,textedit打开没问题。

    第 2 条附言  ·  2016-06-08 01:01:46 +08:00
    改用 unicodecsv 这个库,然而没什么卵用, excel 打开还是有乱码。
    5 条回复    2016-06-08 09:23:33 +08:00
    raptium
        1
    raptium  
       2016-06-07 22:49:07 +08:00   ❤️ 1
    虽然 csv 格式比较简单,但是……既然标准库里有 csv 模块,还是可以用一下的吧?

    Excel 认 UTF-8 格式的文件似乎要 BOM 头才行,这个不确定了,我生成的直接打开从来都是乱码的……
    korvin
        2
    korvin  
       2016-06-08 00:20:01 +08:00
    我之前用 GBK 编码在 windows 和 mac 的 micsoft office 上没有乱码,在 centos 的 LibreOffice 下乱码。
    dyniao
        3
    dyniao  
       2016-06-08 08:52:50 +08:00
    据说不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯, UTF-8 和 带 BOM 的 UTF-8 的区别就是有没有 BOM 。即文件开头有没有 U+FEFF 。编译成 base64 则为 77u/。


    我的问题是这么解决的,生成的时候在 base64 ,后边添加 77u/这几个字符。
    `data:application/vnd.csv;base64,5YWs5Y+46YOo6...`

    `data:application/vnd.csv;base64,77u/5YWs5Y+46YOo6...`
    Neveroldmilk
        4
    Neveroldmilk  
       2016-06-08 09:23:06 +08:00
    我记得 excel 需要设定编码类型的,否则用默认的系统编码打开照样是乱码。
    Neveroldmilk
        5
    Neveroldmilk  
       2016-06-08 09:23:33 +08:00
    @korvin CentOS 默认是 en UTF-8 或者 zh UTF-8.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3556 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:14 · PVG 19:14 · LAX 03:14 · JFK 06:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.