我正在尝试使用填充了信息的文本文件来对Python 3程序进行一些操作.但是,在尝试读取文件时,我收到以下错误:
回溯(最近一次调用最后一次):文件"SCRIPT LOCATION",第NUMBER行,在text = file.read()文件"C:\ Python31\lib\encodings\cp1252.py",第23行,在解码中返回codecs.charmap_decode (input,self.errors,decoding_table)[0] UnicodeDecodeError:'charmap'编解码器无法解码2907500位的字节0x90:字符映射到
如果有人能给我任何帮助试图解决这个问题,我将非常感激.
在我们的应用中,我们收到的文本文件(.txt,.csv从不同的来源,等等).在阅读时,这些文件有时会包含垃圾,因为文件是在不同的/未知的代码页中创建的.
有没有办法(自动)检测文本文件的代码页?
的detectEncodingFromByteOrderMarks,对StreamReader构造,工程UTF8 和其他的Unicode标文件,但是我正在寻找一种方法来检测代码页,像ibm850,windows1252.
谢谢你的回答,这就是我所做的.
我们收到的文件来自最终用户,他们没有关于代码页的线索.接收者也是最终用户,到目前为止,这是他们对代码页的了解:代码页存在,并且令人讨厌.
解:
说我有一个功能:
def NewFunction():
return '£'
Run Code Online (Sandbox Code Playgroud)
我想在它前面打一些带有井号的东西,当我尝试运行这个程序时它会输出错误,显示以下错误信息:
SyntaxError: Non-ASCII character '\xa3' in file 'blah' but no encoding declared;
see http://www.python.org/peps/pep-0263.html for details
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何在返回功能中加入英镑符号?我基本上是在课堂上使用它,它'__str__'包含在包含英镑符号的部分内.
这是我的代码,
for line in open('u.item'):
#read each line
Run Code Online (Sandbox Code Playgroud)
每当我运行此代码时,它会给出以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2892: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)
我试图解决这个问题并在open()中添加一个额外的参数,代码看起来像;
for line in open('u.item', encoding='utf-8'):
#read each line
Run Code Online (Sandbox Code Playgroud)
但它再次给出了同样的错误.那我该怎么办!请帮忙.
假设您想在某处保存一堆文件,例如在BLOB中.假设你想通过网页将这些文件输出,并让客户端自动打开正确的应用程序/查看器.
假设:浏览器通过HTTP响应中的mime-type(content-type?)标头确定要使用的应用程序/查看器.
基于该假设,除了文件的字节外,您还希望保存MIME类型.
您如何找到文件的MIME类型?我目前在Mac上,但这也适用于Windows.
将文件发布到网页时,浏览器是否会添加此信息?
是否有一个整洁的python库来查找这些信息?WebService或(甚至更好)可下载的数据库?
我正在使用Python-2.6 CGI脚本,但在服务器日志中发现此错误json.dumps(),
Traceback (most recent call last):
File "/etc/mongodb/server/cgi-bin/getstats.py", line 135, in <module>
print json.dumps(??__get?data())
File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 0: invalid start byte
Run Code Online (Sandbox Code Playgroud)
在这里,
?__get?data()功能返回dictionary {}.
在发布这个问题之前,我已经提到了这个问题.
以下行是伤害JSON编码器,
now = datetime.datetime.now()
now = datetime.datetime.strftime(now, '%Y-%m-%dT%H:%M:%S.%fZ')
print json.dumps({'current_time': now}) …Run Code Online (Sandbox Code Playgroud) 在工作中似乎没有一周没有一些编码相关的conniption,灾难或灾难.这个问题通常来自程序员,他们认为他们可以在不指定编码的情况下可靠地处理"文本"文件.但你不能.
因此,已经决定从此以后禁止文件的名称以*.txt或结尾*.text.我们的想法是,这些扩展误导了偶然程序员对编码的沉闷,这会导致处理不当.没有任何扩展几乎会更好,因为至少你知道你不知道你有什么.
但是,我们并不是那么远.相反,您将需要使用以编码结尾的文件名.因此,对于文本文件,例如,这些会是这样README.ascii,README.latin1,README.utf8,等.
对于需要特定扩展的文件,如果可以在文件本身内部指定编码,例如在Perl或Python中,那么您应该这样做.对于像Java源这样的文件,文件内部不存在这样的工具,你将把编码放在扩展名之前,例如SomeClass-utf8.java.
对于输出,UTF-8是非常优选的.
但是对于输入,我们需要弄清楚如何处理我们的代码库中的数千个文件*.txt.我们想重命名所有这些以符合我们的新标准.但我们不可能全都注意它们.所以我们需要一个真正有效的库或程序.
它们有各种ASCII,ISO-8859-1,UTF-8,Microsoft CP1252或Apple MacRoman.虽然我们知道我们可以判断某些东西是否为ASCII,并且我们知道某些东西是否可能是UTF-8,但我们对8位编码感到困惑.因为我们在混合的Unix环境(Solaris,Linux,Darwin)中运行,大多数桌面都是Mac,所以我们有很多烦人的MacRoman文件.这些尤其是一个问题.
一段时间以来,我一直在寻找一种方法来以编程方式确定哪一个
文件在,我还没有找到一个程序或库,可以可靠地区分这三种不同的8位编码.我们可能单独拥有超过一千个MacRoman文件,因此我们使用的任何字符集检测器都必须能够嗅出它们.我看过的任何东西都无法解决问题.我对ICU字符集检测器库寄予厚望,但它无法处理MacRoman.我也看过模块在Perl和Python中做同样的事情,但一次又一次它总是相同的故事:不支持检测MacRoman.
我正在寻找的是一个现有的库或程序,它可靠地确定文件所在的五种编码中的哪一种 - 并且最好不止于此.特别是它必须区分我引用的三个3位编码,尤其是MacRoman.这些文件的英文文本超过99%; 其他语言中有一些,但并不多.
如果它是库代码,我们的语言首选项是它在Perl,C,Java或Python中,并按此顺序.如果它只是一个程序,那么我们并不关心它是什么语言,只要它是完整的源代码,在Unix上运行,并且完全不受阻碍.
有没有其他人有这个随机编码的遗留文本文件的问题?如果是这样,你是如何尝试解决它的,你有多成功?这是我的问题中最重要的方面,但我也对你是否认为鼓励程序员用这些文件所在的实际编码来命名(或重命名)他们的文件感兴趣,这将有助于我们避免将来出现这个问题.曾经尝试过任何人强制执行该体制的基础上,如果是的话,是说成功与否,为什么?
是的,我完全明白为什么鉴于问题的性质,人们无法保证给出明确的答案.对于小文件尤其如此,您没有足够的数据可供使用.幸运的是,我们的文件很少.除随机README文件外,大多数的大小范围为50k到250k,而且许多都更大.任何超过几K的东西都保证是英文的.
问题领域是生物医学文本挖掘,因此我们有时处理广泛且极大的语料库,就像所有PubMedCentral的Open Access资源库一样.一个相当庞大的文件是BioThesaurus 6.0,为5.7千兆字节.这个文件特别烦人,因为它几乎都是UTF-8.但是,我相信,有些numbskull会在其中插入几行8位编码 - 微软CP1252.在你旅行之前需要一段时间.:(
是的是一个最常见的问题,这个问题对我来说很模糊,因为我对此并不了解.
但我想要一种非常精确的方法来查找文件编码.像Notepad ++一样精确.
我有一个文件夹,这些文件没有扩展名.我该如何检查文件类型?我想检查文件类型并相应地更改文件名.我们假设一个函数filetype(x)返回类似的文件类型png.我想做这个:
files = os.listdir(".")
for f in files:
os.rename(f, f+filetype(f))
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我需要在Python中将一堆文件转换为utf-8,而我在"转换文件"部分时遇到了麻烦.
我想做相当于:
iconv -t utf-8 $file > converted/$file # this is shell code
Run Code Online (Sandbox Code Playgroud)
谢谢!