CSV的坑

在Ubuntu下是简单的写入完事

import csv
...
with open(filename, 'w') as output:
f = csv.writer(output)
f.writerow(results[0].keys())

.在win7下, 用msys2环境执行同一个python脚本, 发现生成的csv有两个问题: 1)有空行, 2)编码变成了GB2312

关于空行的问题, 百度的结果都是open(filename, 'wb')来解决, 但是在python3下会报

TypeError: a bytes-like object is required, not 'str'

.最终在stackoverflow上找到答案是python3的csv处理改了, 用binary时不能用str,  https://stackoverflow.com/questions/35100280/python3-csv-writerows-typeerror-str-does-not-support-the-buffer-interface

解决办法是用 newline=''

with open(filename, "w", newline="")

.空行问题解决了, 然后是编码问题

百度上那种在写入时实时转换编码的方案肯定是有问题的, 最终找到的解决办法是使用unicodecsv替换csv, 然后writer里带上参数 encoding='utf-8'

import unicodecsv as csv
...
f = csv.writer(output, encoding='utf-8')

.但是又报了TypeError错误

TypeError: a bytes-like object is required, not 'str'

咦这不是刚解决过吗, 看了下unicodecsv的使用说明 https://pypi.org/project/unicodecsv/0.14.1/  这货要用binary模式打开文件, 所以要改为

with open(filename, 'wb') as output:

.于是那个newline=''的参数也不需要了.

sha256sum的坑

在win7下, sha256sum的结果会在文件名前面默认加星号, 而在ubuntu下, 默认不加星号, 关于星号的解释是这样的

The sums are computed as described in FIPS-180-2.  When checking, the input
should be a former output of this program. The default mode is to print a
line with checksum, a space, a character indicating input mode ('*' for binary,
' ' for text or where binary is insignificant), and name for each FILE.

看起来可以用-t参数强制指定使用text格式, 这样前面就不会出现星号了, 但是对结果会不会有影响呢? 测试了一个windows下创建的文本文件

Milton@ MSYS /d/
$ sha256sum -t win_text.txt
77a6b0ba40dd08f35c056386a248c0aab2de7fec0b1a2865cd41d09842147db5 win_text.txt Milton@ MSYS /d/
$ sha256sum -b win_text.txt
77a6b0ba40dd08f35c056386a248c0aab2de7fec0b1a2865cd41d09842147db5 *win_text.txt

.以及一个二进制文件

Milton@ MSYS /d
$ sha256sum -t 2018-12-31_2.zip
86dd42cae6b42420b60b8d35bd6168732e974c44a812486fdbbe5131b23dce79 2018-12-31_2.zip Milton@ MSYS /d
$ sha256sum -b 2018-12-31_2.zip
86dd42cae6b42420b60b8d35bd6168732e974c44a812486fdbbe5131b23dce79 *2018-12-31_2.zip

.看来也没有影响, 所以就在windows下增加-t参数避免输出星号吧

Windows下python3生成UTF8的CSV文件和sha256sum踩坑记录的更多相关文章

  1. 使用Windows下的git工具往github上传代码 踩坑记录

    使用Windows下的git工具往github上传代码 踩坑记录 背景 由于以前接触的项目都是通过svn进行版本控制,现在公司项目使用git,加上自己平时有一个练手小项目,趁着周末试着把项目上传到自己 ...

  2. Docker+STF在ubuntu下测试环境搭建(详细搭建步骤及踩坑记录)

    一.什么是OpenSTF? STF又称OpenSTF,它是一个手机设备管理平台,可以对手机进行远程管理.调试.远程手机桌面监控等操作.这个系统类似于目前很流行的云测服务比如Testin,虽然网页上提供 ...

  3. windows下python3 使用cx_Oracle,xlrd插件进行excel数据清洗录入

    我们在做数据分析,清洗的过程中,很多时候会面对各种各样的数据源,要针对不同的数据源进行清洗,入库的工作.当然python这个语言,我比较喜欢,开发效率高,基本上怎么写都能运行,而且安装配置简单,基本上 ...

  4. windows下python3.6 32bit 安装django

    在Windows下python3.6安装Django1.11.3 1.首先下载地址:https://pypi.python.org/pypi/Django/1.11.3 pip install dja ...

  5. MAC 下 Excel打开UTF-8格式的文件乱码

    为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE字符开头.这作为一个”特征符”或”字节顺序标记(byte-o ...

  6. windows下python3.6安装pycryto or crypto or pycryptodome与使用

    pycrypto,pycrytodome和crypto是一个东西,在很久以前,crypto在python上面的名字是pycrypto它是一个第三方库,但是已经停止更新三年了,所以不建议安装这个库: w ...

  7. 108.生成和下载csv文件

    生成CSV文件 有时候我们做的网站,需要将一些数据,生成一个csv文件返回浏览器,并且是作为附件的形式下载下来. 生成小的csv文件: 生成一个小的csv文件,我们用Python内置的csv模块来处理 ...

  8. Windows下python3登陆和操作linux服务器

    一.环境准备 python3远程连接需要用到pycrytodome和paramiko库,其中后者依赖前者,所以按照顺序来安装 1. 安装pycrytodome 1 pip install pycryt ...

  9. Spring Boot下的一种导出CSV文件的代码框架

    1.前言 ​ CSV,逗号分隔值(Comma-Separated Values),即为逗号分隔的文本文件.如果值中含有逗号.换行符.制表符(Tab).单引号及双引号,则需要用双引号括起来:如果值中包含 ...

随机推荐

  1. Shiro笔记(一)Shiro整体介绍

    介绍:是一个java的安全(权限)框架 可以完成的功能:认证登录(Authentication).授权(Authorization).加密(cryptography).会话管理(session man ...

  2. idea工具maven生命周期clean,install,package等区别

    idea工具maven projects里面有9种生命周期,生命周期是包含在一个项目构建中的一系列有序的阶段. 一.最常用的两种打包方法: 1.clean,package(如果报错,很可能就是jar依 ...

  3. Kafka生产者案例报警告SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

    一.SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 这个报警告的原因简单来说时因为slf4j的版本 ...

  4. FZU 2254 英语考试 (最小生成树)

    在过三个礼拜,YellowStar有一场专业英语考试,因此它必须着手开始复习. 这天,YellowStar准备了n个需要背的单词,每个单词的长度均为m. YellowSatr准备采用联想记忆法来背诵这 ...

  5. codeforces 1058B - Vasya and Cornfield

    <题目链接> 题目大意: 给出一个矩形,该矩形的四个顶点分别为:(0,d),(d,0),(n,n−d) and (n−d,n).然后给出一些点的坐标,分别判断这些点是否在该矩形内. 解题分 ...

  6. shell sort result to self

    You can use file redirection to redirected the sorted output: sort input-file > output_file Or yo ...

  7. Left join on where 区别

    on 后面 直接加条件的话,不会对左边的表产生影响,on条件是在左关联时候的条件,不管如何都会返回左边表中的记录 where 加条件 才会对左边的表 生效.where条件是关联查询之后的条件

  8. Linux学习笔记 备份摘要

    方案的目的:备份最重要的Linux档案 系统基本设定资讯 网络服务的内容资料 1.系统基本设定资讯 /etc 整个目录 其中 /etc/passwd /etc/show /etc/group /etc ...

  9. web服务搭建

  10. Java性能调优zz

    写Java也有n年了,现在还是有不少的坏的代码习惯,也通过学习别人的代码学到了不少好的习惯.这篇文章主要是整理的资料.留给自己做个警戒,提示以后写代码的时候注意!在文章的后面,会提供整理的原材料下载. ...