python文件写入utf-8_关于utf 8:用Python写入UTF-8文件
我真的对codecs.open function很困惑。当我这样做的时候:
file = codecs.open("temp","w","utf-8")
file.write(codecs.BOM_UTF8)
file.close()
它给了我错误
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position
0: ordinal not in range(128)
如果我这样做:
file = open("temp","w")
file.write(codecs.BOM_UTF8)
file.close()
它很好用。
问题是为什么第一种方法失败了?如何插入物料清单?
如果第二种方法是正确的方法,那么使用codecs.open(filename,"w","utf-8")有什么意义?
不要使用UTF-8格式的BOM。拜托。
@克里斯蒂安?为什么不呢?
@UTF-8中不需要salmanpk-bom,只会增加复杂性(例如,不能将bom的文件和结果与有效文本连接在一起)。看到这个问题,不要错过问题下面的重要评论。
我认为问题在于codecs.BOM_UTF8是字节字符串,而不是Unicode字符串。我怀疑文件处理程序试图根据"我打算将Unicode作为UTF-8编码文本写入,但您给了我一个字节字符串"来猜测您真正的意思!
尝试直接为字节顺序标记(即unicode u+feff)编写unicode字符串,以便文件将其编码为utf-8:
import codecs
file = codecs.open("lol","w","utf-8")
file.write(u'\ufeff')
file.close()
(这似乎给出了正确的答案——一个包含字节ef bb bf的文件。)
edit:s.lott建议使用"utf-8-sig"作为编码,这比自己显式地编写BOM要好,但我将把这个答案留在这里,因为它解释了以前发生的问题。
多谢你这么做,肯定让事情更清楚了。
警告:打开和打开不同。如果您执行"从编解码器导入打开",它将不会与您只需键入"打开"相同。
您也可以使用codecs.open("test.txt"、"w"、"utf-8-sig")。
我得到"typeerror:需要一个整数(得到str类型)"。我不明白我们在这里做什么。有人能帮忙吗?我需要在文本文件中附加一个字符串(段落)。在写之前我需要先把它转换成整数吗?
@穆根:据我所知,我写的确切代码工作得很好。我建议你问一个新的问题,精确地显示你得到了什么代码,以及错误发生在哪里。
@穆根,你需要打电话给codecs.open,而不是直接打给open
阅读以下内容:http://docs.python.org/library/codecs.html module-encodings.utf_8_sig
这样做
with codecs.open("test_output","w","utf-8-sig") as temp:
temp.write("hi mom
")
temp.write(u"This has ?")
生成的文件是带有预期BOM的UTF-8。
谢谢。这是有效的(Windows7x64,python 2.7.5x64)。当您以模式"A"(附加)打开文件时,此解决方案工作良好。
首先是import codecs。
这对我不起作用,Windows上的python 3。我必须用open(file_name,'wb')作为bom file:bom file.write(codecs.bom_utf8)来代替,然后重新打开该文件进行append。
@S-LOTT给出了正确的过程,但是在Unicode问题上进行扩展,Python解释器可以提供更多的见解。
jon skeet对于codecs模块是正确的(不寻常的),它包含字节字符串:
>>> import codecs
>>> codecs.BOM
'\xff\xfe'
>>> codecs.BOM_UTF8
'\xef\xbb\xbf'
>>>
选择另一个NIT,BOM有一个标准的Unicode名称,可以输入为:
>>> bom= u"
{ZERO WIDTH NO-BREAK SPACE}"
>>> bom
u'\ufeff'
也可通过unicodedata访问:
>>> import unicodedata
>>> unicodedata.lookup('ZERO WIDTH NO-BREAK SPACE')
u'\ufeff'
>>>
我使用file*nix命令将未知字符集文件转换为utf-8文件
# -*- encoding: utf-8 -*-
# converting a unknown formatting file in utf-8
import codecs
import commands
file_location ="jumper.sub"
file_encoding = commands.getoutput('file -b --mime-encoding %s' % file_location)
file_stream = codecs.open(file_location, 'r', file_encoding)
file_output = codecs.open(file_location+"b", 'w', 'utf-8')
for l in file_stream:
file_output.write(l)
file_stream.close()
file_output.close()
现在,您还可以使用chardet。
使用# coding: utf8而不是# -*- coding: utf-8 -*-,这更容易记住。
python文件写入utf-8_关于utf 8:用Python写入UTF-8文件相关推荐
- Python读取多个excel文件(删除字段、数据格式转换、dataframe多表合并)并写入ElasticSearch实战(自动创建索引、写入ElasticSearch、探索性数据分析)
Python读取多个excel文件(删除字段.数据格式转换.dataframe多表合并)并写入ElasticSearch实战(自动创建索引.写入ElasticSearch.探索性数据分析) 目录
- python写入一个文件之前可以不打开_如何用python实现真正的打开和关闭文件
file_name:file_name变量是一个包含了你要访问的文件名称的字符串值. access_mode:access_mode决定了打开文件的模式:只读,写入,追加等.所有可取值见如下的完全列表 ...
- python写入mysql数据库_python调用http接口,数据写入mysql数据库并下载录音文件
写个脚本一共完成了三件事: 第一,python调用http接口, 第二,把调用到的数据写入mysql数据库, 第三,python调用wsdl接口,获取录音文件, import time import ...
- python为运行为何出现乱码_我的python写入文件正常,打开后却是乱码格式为什么?...
windows7 +2.7.5 我的源代码: #!/usr/bin/env python # -*- coding: utf-8 -*- file = open(r"D:\Android\p ...
- python写入文件没反应_记第一个问题——python文件无法写入数据
原博文 2019-11-18 23:47 − import getpass username = input("please input your name:") password ...
- python使用pandas中的to_json函数将dataframe数据写入json文件中
python使用pandas中的to_json函数将dataframe数据写入json文件中 目录 python使用pandas中的to_json函数将dataframe数据写入json文件中 #导入 ...
- python写入excel文件保存在哪里_万字长文记录Python读写EXCEL文件常用方法大全
python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别,这里我主要介绍几个常用的方式. 用xlrd和xlwt进行excel读写; 用openpyxl进行excel读写; 用panda ...
- python中write函数_第9.7节 Python使用write函数写入文件内容
一.语法 write(data) data为要写入的数据,可以为字符串str类型,也可以是bytes类型. 返回值为实际写入的数据数,在写入数据为str类型时,该数据为实际写入的UNIOCODE字符数 ...
- Python文件内容读取成绩单,计算出平均分并且写入原文件存储
python文件内容读取成绩单,计算出平均分并且写入原文件存储 文件内容如下:( 格式参考下表, 内容自己定义) 姓名 语文 数学 英语 aaa 80 70 65 bbb 85 88 90 ccc 7 ...
- python文件处理基础_第六篇:python基础之文件处理
阅读目录 一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 正趣果上果 Interesting fruit fruit 词:郭婞 曲:陈粒 编曲/混音/和声: ...
最新文章
- python和R对dataframe的拼接、采样、链式操作:dplyr、tidyr、concat、rbind、cbind、sample、sample_n、set.seed、mutate、filter
- 别人家的爸爸!为了解释区块链,阿里工程师给儿子画了一本童话书
- 区块链今年,胜过过去十年
- IOS学习笔记之二十二(文件io)
- 小白 LeetCode 5605 检查两个字符串数据是否相等
- atoi函数_每日干货丨C语言中的字符串处理库函数介绍与实现
- C++socket编程(七):7.1 http协议讲解,通过抓包和telnet分析
- c#实现播放器的集中方式
- 人员管理系统 java_员工管理系统java版
- hau 1874 畅通工程续
- Pyramidal Feature Shrinking for Salient Object Detection
- 用计算机打课程表,怎么用电脑做课程表
- 基于LVD、贝叶斯模型算法实现的电商行业商品评论与情感分析案例
- 如何在Tanzu Cluster中使用vSphere with Tanzu内置容器注册表
- 《区块链技术原理》笔记
- 专访实战专家,揭秘iOS神奇开发之路
- C语言程序设计教程的读后感,c语言程序设计观后感
- p2p银行充值功能模块 支付宝调用
- hh模型仿真matlab程序,gardner算法算法matlab仿真请教(附程序)
- 整理的AD/2000技巧