Windows下python3生成UTF8的CSV文件和sha256sum踩坑记录

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下创建的文本文件

[email protected] MSYS /d/
$ sha256sum -t win_text.txt
77a6b0ba40dd08f35c056386a248c0aab2de7fec0b1a2865cd41d09842147db5  win_text.txt

[email protected] MSYS /d/
$ sha256sum -b win_text.txt
77a6b0ba40dd08f35c056386a248c0aab2de7fec0b1a2865cd41d09842147db5 *win_text.txt

.以及一个二进制文件

[email protected] MSYS /d
$ sha256sum -t 2018-12-31_2.zip
86dd42cae6b42420b60b8d35bd6168732e974c44a812486fdbbe5131b23dce79  2018-12-31_2.zip

[email protected] MSYS /d
$ sha256sum -b 2018-12-31_2.zip
86dd42cae6b42420b60b8d35bd6168732e974c44a812486fdbbe5131b23dce79 *2018-12-31_2.zip

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

原文地址:https://www.cnblogs.com/milton/p/10213565.html

时间: 2024-11-05 11:24:32

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

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

我们在做数据分析,清洗的过程中,很多时候会面对各种各样的数据源,要针对不同的数据源进行清洗,入库的工作.当然python这个语言,我比较喜欢,开发效率高,基本上怎么写都能运行,而且安装配置简单,基本上有网的环境pip install全部都搞定,没网的话,把whl包copy过来一行命令也就解决了(windows下python3.5使用pip离线安装whl包). 本篇博客就针对,在windows平台下使用python3(python2社区将要停止支持,使用3是大势所趋),读取xls,xlsx格式的数

windows下Python打开包含中文路径名文件

windows使用gbx(gb2312,gbk,gb18030我也不知道是哪个)对文件名及文件路径进行编码保存.打开文件的函数中使用诸如open(filename.encode('gbk'))可以很好的解决. #coding:utf8 if __name__ == '__main__': srcfile = r"D:/测试路径/测试文件.txt" f = open(srcfile.decode('utf8').encode('gbk')) for text in f.readlines

windows下怎么生成github的ssh公钥

windows下如何生成github的ssh公钥: 1. 安装git,打开Git Bash 2. 键入命令:ssh-keygen -t rsa -C "[email protected]"  "[email protected]"是github账号 3. 提醒你输入key的名称,输入如id_rsa 4. 在C:\Documents and Settings\Administrator\下产生两个文件:id_rsa和id_rsa.pub. 5. 把4中生成的密钥文件复

108:生成和下载csv文件

生成CSV文件: 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 生成小的CSV文件: 这里将用一个生成小的CSV文件为例,来把生成CSV文件的技术要点讲到位.我们用Python内置的csv模块来处理csv文件,并且使用HttpResponse来将csv文件返回回去.示例代码如下: from django.http import HttpResponse, JsonResponse import json, csv

Windows下Git Bash中VIM打开文件中文乱码

Windows下Git Bash中VIM打开文件中文乱码,解决方法是: 步骤一 [email protected] MINGW64 /d/项目GGE/Hard_for_GGE (master)$ cd /etc/ [email protected] MINGW64 /etc$ vi vimrc 步骤二 在打开的vimrc文件开头添加以下代码: set nu set fencs=utf-8,gbk,utf-16,utf-32,ucs-bom 保存并退出vimrc编辑文档. 步骤三 1.退出git

108.生成和下载csv文件

生成CSV文件 有时候我们做的网站,需要将一些数据,生成一个csv文件返回浏览器,并且是作为附件的形式下载下来. 生成小的csv文件: 生成一个小的csv文件,我们用Python内置的csv模块来处理csv文件,并且使用HttpResponse来将csv文件返回回去.==采用python内置的csv模块创建csv文件示例代码如下:== from .models import User import csv from django.template import loader, Context d

解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG

解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6-6 方法一: 出处:http://blog.csdn.net/leonzhouwei/article/details/8447643 直接用 Excel 打开 UTF-8 编码的 CSV 文件会导致汉字部分出现乱码. 原因是 Excel 以 ANSI 格式打开,不会做编码识别. 打开 UTF-8 编

在windows下,新建点开头的文件

教大家如何在windows下建立一个以"."开头的文件. 新建一个“..txt”不就行了?(这是我朋友想到的) 对吧,建好了. 大家会说,还是不能新建".hatccess"这样的文件. 我来演示. 1.按windows徽标键+R键.2.输入“cmd”,回车.3.文件新建在桌面上,输入“cd Desktop”4.在桌面上先新建一个123.txt.5.输入“copy 123.txt 你要新建的文件名”.6.删除“123.txt”,可以看到已经有了一个“.txt”(就是你

windows下定期清理超过一定时间的文件

windows下定期清理超过一定时间的文件 背景 linux下当我们想定期清理超过7天无修改的日志或备份文件,可以通过以下命令来完成: find $path -type f  -mtime|-ctime +7 -exec rm -f {} \; windows下的find命令,看起来远没有linux下这个强大: C:\Documents and Settings\qunyingliu>find /? Searches for a text string in a file or files. F