博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows下python3生成UTF8的CSV文件和sha256sum踩坑记录
阅读量:6278 次
发布时间:2019-06-22

本文共 1792 字,大约阅读时间需要 5 分钟。

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,  

解决办法是用 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的使用说明   这货要用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 inputshould be a former output of this program.  The default mode is to print aline 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.txt77a6b0ba40dd08f35c056386a248c0aab2de7fec0b1a2865cd41d09842147db5  win_text.txtMilton@ MSYS /d/$ sha256sum -b win_text.txt77a6b0ba40dd08f35c056386a248c0aab2de7fec0b1a2865cd41d09842147db5 *win_text.txt

.以及一个二进制文件

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

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

 

转载地址:http://fkfva.baihongyu.com/

你可能感兴趣的文章
数据结构顺序队列打卡
查看>>
九九乘法表程序设计
查看>>
组合数学 - 1的个数
查看>>
2440启动流程
查看>>
C函数调用
查看>>
2017-2018-1 20155229 《信息安全系统设计基础》第一周学习总结
查看>>
C 语言 mmap
查看>>
小数化分数的O(log2n)解法
查看>>
Fakeapp2.2安装,使用简记--------------转载自iJessie
查看>>
POJO与JavaBean的区别
查看>>
CoreDataManager-Swift版-兼容iOS10以前的版本
查看>>
Dynamic seq2seq in tensorflow
查看>>
96. Unique Binary Search Trees
查看>>
linux---进程相关的命令
查看>>
Poj(2236),简单并查集
查看>>
ResNet 修改
查看>>
每日一个机器学习算法——adaboost
查看>>
分享pdf转换成word的方法
查看>>
jquery选择器
查看>>
Mac安装Tomcat的Home路径
查看>>