2016-08-12 18 views
0

最近私はETL開発者として仕事を始めました。私の練習の一環として、生データを含むテキストファイルからデータを抽出しています。私の生データは画像のように見えます。 My Raw DataPythonを使用してテキストファイルに区切り文字を追加する

ここでデータファイルに区切り記号を追加します。基本的にはすべての行の後にコンマ(,)を追加したいと思います。 Pythonの私のコードはこのように見えます。 new_locations.txtは出力テキストファイルである

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) 

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文字が存在するまでしか読むことができません。他の文字が始まると、エラーが発生します。 –

答えて

1

あなたが「テキスト」モードでのpython 3でファイルを開くと、その後の読み書きのpython(ユニコード)文字列にファイル内のバイトを変換します。デフォルトのエンコーディングはプラットフォームに依存しますが、通常はUTF-8です。

あなたはLatin-1エンコーディングを使用して、あなたは

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

で開く必要があるファイルの場合は、出力がラテン1になりたい場合は、おそらくまた、出力でこれを行う必要があります。

おそらく、すべてのデータをデータファイル内のユニコード形式に変換することを検討する必要があります。

+0

答えをありがとう。これは本当にうまくいった。 –

0

したがって、ファイルに書き込むときは、書き込む前にエンコードする必要があります。あなたがgoogleの場合は、結果のトンを見つけるでしょう。ここでは、

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

latin-1エンコーディングは、utf-8やasciiではサポートされていないcharachterを余分にサポートしますが、サポートされていない文字だけlatin-1にすべてのcharを変更するというわけではありません。上のジェームスは、私が提案したことからやるより良い方法を持っています。 – harshil9968

関連する問題