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

问题描述:

我最近开始了作为ETL开发人员的工作,并且作为练习的一部分,我从包含原始数据的文本文件中提取数据。我的原始数据如图所示。 My Raw Data使用python将分隔符添加到文本文件

现在我想为我的数据文件添加分隔符。基本上在每行之后,我想添加一个逗号(,)。我在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是输出文本文件,locations.txt是原始数据。

但是,它一直抛出错误。

UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 3724: character maps to

我究竟在哪里出错?

Note: The characters in raw data are not all ASCII characters. Some are Latin characters as well.

+0

你能读取没有这些错误的整个文件吗? –

+0

@DanielLee不,我无法阅读整个文件。我只能读取它直到出现ASCII字符。一旦其他角色开始,他们会抛出一个错误。 –

当您在“文本”模式打开在Python 3文件,然后阅读和书写内容转换字节的文件到Python(Unicode)的字符串英寸默认编码是平台相关的,但通常是UTF-8。

如果文件使用Latin-1编码,你应该

with open('locations.txt', 'r', encoding='latin_1') as input 

打开你或许应该也和输出,如果你想输出也将在Latin-1的做到这一点。

从长远来看,您应该考虑将所有数据转换为数据文件中的unicode格式。

+0

感谢您的回答。这真的起作用了。 –

所以当你写入文件时,你需要在写入之前对它进行编码。如果你谷歌,你会发现吨的结果。

这里是如何可以做到:

output.write(new_line.encode('utf-8'))# or ascii 

您也可以要求忽略不能转换但西港岛线造成charachter的损失和可能不是所期望的输出,这里是怎么说将做到:

output.write(new_line.encode('ascii','ignore'))# or 'utf-8' 
+0

嘿谢谢你的答案。不过,我有一个跟进问题。 'utf-8'不适合我。 '拉丁-1'做到了。现在原始数据可以是不同字符的混合。如何使这个完全通用?我不想在任何角色之间进行区分。 –

+0

所以拉丁-1编码将对utf-8或ascii不支持的charachter有额外的支持,它不会将所有char都更改为latin-1,而仅仅是那些不支持的。上面的詹姆斯有一个更好的方式来实现我的建议。 – harshil9968