我最近开始作为ETL开发人员工作,作为练习的一部分,我从包含原始数据的文本文件中提取数据。我的原始数据如图所示。 My Raw Data
现在我想在我的数据文件中添加分隔符。基本上在每一行之后,我想添加一个逗号(scala> "hello" match {
| case "hel" => 1
| case "hello" =>
| def f(i: Int): Int = {
| i * 2
| }
| f(3) // don't forget to call the function...
| }
res0: Int = 6
)。我在Python中的代码看起来像这样。
,
其中with open ('new_locations.txt', 'w') as output:
with open('locations.txt', 'r') as input:
for line in input:
new_line = line+','
output.write(new_line)
是输出文本文件,new_locations.txt
是原始数据。
然而,它总是让我误报。
UnicodeDecodeError:'charmap'编解码器无法解码位置3724中的字节0x81:字符映射到
我到底哪里错了?
注意:原始数据中的字符不是所有ASCII字符。有些也是拉丁字符。
答案 0 :(得分:1)
在" text"中打开python 3中的文件时模式然后读写将文件中的字节转换为python(unicode)字符串。默认编码取决于平台,但通常为UTF-8。
如果您使用latin-1编码,则应使用
打开with open('locations.txt', 'r', encoding='latin_1') as input
如果您希望输出也在latin-1中,您可能也应该对输出执行此操作。
从长远来看,您应该考虑将所有数据转换为数据文件中的unicode格式。
答案 1 :(得分:0)
因此,当您写入文件时,您需要在写入之前对其进行编码。如果你谷歌,你会发现很多结果。
以下是如何做到的:
output.write(new_line.encode('utf-8'))# or ascii
你也可以要求忽略哪些不能被转换但是会导致charachter丢失并且可能不是所需的输出,这是如何做的:
output.write(new_line.encode('ascii','ignore'))# or 'utf-8'