質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1262閲覧

python txt csv 変換 エラー

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/25 14:01

編集2020/09/25 14:06

前提・実現したいこと

空白で仕切られた.txtファイルを.csvファイルに変換するようなプログラムを書いています. google colaboratoryにて問題なく実行したのですが,jupyterで実行したときにエラーが発生しました. エラーについて調べてみましたが,修正方法がよくわからないので質問させていただきました.

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- UnicodeDecodeError Traceback (most recent call last) <ipython-input-4-3936435c8d92> in <module> 16 if __name__ == "__main__": 17 filename = input("変換したいファイル名を入力してください") ---> 18 text_csv_converter(filename) <ipython-input-4-3936435c8d92> in text_csv_converter(datas) 6 with open(datas)as rf: 7 with open(file_csv, "w",encoding="utf-8")as wf: ----> 8 readfile = rf.readlines() 9 for read_text in readfile: 10 read_text = read_text.split() UnicodeDecodeError: 'cp932' codec can't decode byte 0x8a in position 29: illegal multibyte sequence

該当のソースコード

python

1import csv 2 3def text_csv_converter(datas): 4 file_csv = datas.replace("txt", "csv") 5 try: 6 with open(datas)as rf: 7 with open(file_csv, "w",encoding="utf-8")as wf: 8 readfile = rf.readlines() 9 for read_text in readfile: 10 read_text = read_text.split() 11 writer = csv.writer(wf, delimiter=",") 12 writer.writerow(read_text) 13 except FileNotFoundError: 14 print("ファイル名が存在しないかパスが異なります.") 15 16if __name__ == "__main__": 17 filename = input("変換したいファイル名を入力してください") 18 text_csv_converter(filename)

試したこと

openの引数にencoding="utf-8"を入れてみましたが変わりませんでした.

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/09/25 14:07

> 空白で仕切られた.txtファイル 文字コードは何ですか?
退会済みユーザー

退会済みユーザー

2020/09/25 14:11

UTF-8です.
toast-uz

2020/09/25 14:20

with open(datas)as rf の引数にencoding="utf-8"を入れても、全く同じエラーでしょうか?
退会済みユーザー

退会済みユーザー

2020/09/25 14:31

数字はうまく反映されましたが,文字に関しては文字化けしてしまいます.
guest

回答2

0

ベストアンサー

with open(datas, "r", encoding="utf-8")as rf:
with open(file_csv, "w")as wf:
で解決しました."w"で書くときはutf-8にしないほうがよいのですね.エンコーディングなかなか難しいです.

投稿2020/09/25 14:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2020/09/25 14:52

「書くときにUTF-8にしないほうがよい」というのは違います。指定しなければ、Windowsで動かせばShift-JISになり、google colaboratoryであれば、たぶん、UTF-8になるでしょう。 出力した結果がどのようになるべきなのかをちゃんと考えて、どのような文字コードで出力するか考えるべきだと思います。
toast-uz

2020/09/25 23:53

質問文は「エラーを解消したい」なのに、書き込みの文字コードまで思い通りになったのが正解って、うーん・・・という感じです。しかも、もとのtxtはUTF-8だけど、書き込みは環境依存にしたいなんて、質問文からは全く読み取れません。
guest

0

pythonはopen関数でファイルを開くとき、OSに応じてデフォルトの文字コードを決定します。Windowsの場合は、 cp932(Shift-JIS)になります。

google colaboratoryでうまく行ったのはデフォルトがUTF-8なのでしょう。

python

1with open(datas,'r',encoding="utf-8")as rf:

としてみたらどうでしょうか。

投稿2020/09/25 14:18

TakaiY

総合スコア13790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/25 14:32

数字に関してはうまくいきました.しかし,文字に関しては文字化けしてしまいました.この原因は何でしょうか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問