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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Python

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

Q&A

解決済

2回答

819閲覧

単語の出現回数をpythonでカウントするプログラムのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Python

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

0グッド

0クリップ

投稿2018/06/05 13:32

編集2018/06/05 13:40

前提・実現したいこと

以下のサイトを参考にしながら単語の出現回数をpythonでカウントするプログラムを書いています。
参考サイト

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

実行したところ、以下のエラーが出ました。
参考のコードと比較して何が問題なのでしょうか。
修正するためのアドバイスをいただきたいです。

--------------------------------------------------------------------------- UnicodeDecodeError Traceback (most recent call last) <ipython-input-4-318f4806d0b0> in <module>() 1 f = open('sample.txt') ----> 2 data = f.read() 3 4 # counting 5 words = {} ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/codecs.py in decode(self, input, final) 319 # decode input (taking the buffer into account) 320 data = self.buffer + input --> 321 (result, consumed) = self._buffer_decode(data, self.errors, final) 322 # keep undecoded input until the next call 323 self.buffer = data[consumed:] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

txtファイルの中身は1列のみで空白のないexcelファイルからtxtファイルに書き出したのですが、書き出したtxtファイルを見て見ると単語と単語の間に大きな空白がある状態で書き出されていました。
sample.txt

りんご いちご りんご

該当のソースコード

python

1f = open('sample.txt') 2data = f.read() 3 4# counting 5words = {} 6for word in data.split(): 7 words[word] = words.get(word, 0) + 1 8 9# sort by count 10d = [(v,k) for k,v in words.items()] 11d.sort() 12d.reverse() 13for count, word in d[:20]: 14 print (count, word)

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

Microsoft Excel for Mac バージョン16.13

Python 3.6.3

オペレーティングシステム名(os.name):Mac OS X
ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

確認したいのですが、sample.txtの文字コードはutf-8でしょうか?
python3のopen()関数は引数encodingを指定しない場合、「多分このファイルは実行環境のデフォルト文字コードで書いてるんやろ!」って解釈します。ちなみにwindowsのコマンドプロンプトcp932 ≒ ShiftJISだったはず...

sample.txtの文字コードを確認してみてください。もしもShiftJISとか、utf-8以外の文字コードの場合、明示的に書いてあげる必要があります。

python

1# sample.txtがShift_JISの場合 2f = open('sample.txt', mode="rt", encoding="shift_jis") 3data = f.read() 4...

投稿2018/06/05 16:35

編集2018/06/05 16:49
kiwibird

総合スコア105

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

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

退会済みユーザー

退会済みユーザー

2018/06/05 21:43

ご回答いただきましてありがとうございます。 $ file -mine ファイル名で確認しましたところ、sample.txtは 「Little-endian UTF-16 Unicode text, with CRLF line terminators」でした。この場合はutf8に変更する必要があるという理解で正しいでしょうか。
退会済みユーザー

退会済みユーザー

2018/06/05 21:59

解決しましたありがとうございました。
guest

0

まず、

UnicodeDecodeError Traceback (most recent call last)

文字コードが違うという事です。 お手軽には、かなでなく、Ascii(半角英数)するとエラーが無くなると思います。日本語対応は、、、調べないと分からない(検索する沢山ありましたが、未検証)

Excelファイルの出力の件は、どうやって Excelファイルを テキストファイルにしているか不明なので、分かりませんが、一般的な話として、見た目、空でも空文字(空白など)が入っている事がよくあります。それに該当してませんか?

参考までに。

投稿2018/06/05 14:03

pepperleaf

総合スコア6383

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

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

退会済みユーザー

退会済みユーザー

2018/06/05 21:59

ご回答いただきましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問