使用python将分隔符添加到文本文件中

时间:2016-08-12 08:25:55

标签: python etl

我最近开始作为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字符。有些也是拉丁字符。

2 个答案:

答案 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'