【发布时间】:2016-06-20 17:34:50
【问题描述】:
我已经成功地解析了我用我写的一个简单的 python 脚本收到的数据文件。我得到的文件是这样的:
file.txt,约 50 列数据,x 1000 行
abcd1,1234a,efgh1,5678a,ijkl1 ...etc
abcd2,1234b,efgh2,5678b,ijkl2 ...etc
...
不幸的是,有时有些行包含 UTF-16 符号,看起来像这样
abcd1,12341,efgh1,UTF-16 symbols here,ijkl1 ...etc
abcd2,1234b,efgh2,5678b,ijkl2 ...etc
...
我已经能够为我的脚本中的命令实现“latin-1”编码,例如:
open('file fixed.txt', 'w', encoding="latin-1").writelines([line for line in open('file.txt', 'r', encoding="latin-1"])
我的问题在于如下代码:
for line in fileinput.Fileinput('file fixed.txt', inplace=1):
line = line.replace(":",",")
print (line, ",")
我无法克服最后一个命令的编码错误。我已尝试强制执行以下编码:
# -*- coding: latin-1 -*-
在文档顶部以及最后提到的命令(查找和替换)之前。如何获取混合编码文件以处理上述命令?我想保留新文件中出现的 UTF-16 (unicode) 符号。提前致谢。
编辑:感谢 Alexis,我能够确定 filinput 不能用于设置另一种编码方法。我使用以下方法解决了我的问题。
f = open(filein,'r', encoding="latin-1")
filedata = f.read()
f.close()
newdata = filedata.replace("old data","new data")
f = open(fileout,'w', encoding="latin-1")
f.write(newdata)
f.close()
【问题讨论】:
-
拥有一个包含多种不同编码数据的文件是没有意义的。您的文件 all 是 UTF-8 吗?如果没有,您可能需要对其进行一些“手术”,以将所有内容整合到一个编码中。另请注意,没有“UTF-16 符号”之类的东西。您可以使用您喜欢的任何 unicode 编码对 unicode 符号进行编码。
-
(顺便说一句,
# -*- coding在这里是一个红鲱鱼。它只指定你的 Python 源文件的编码;它不会影响你读入的数据文件发生的事情。)跨度> -
那么那些“UTF-16 符号”是什么样的呢?你怎么知道那是 UTF-16?
标签: python unicode encoding utf-8 utf-16