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

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

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

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

Q&A

解決済

3回答

27627閲覧

python jupyter notebookのエラーについて

yokookentarou

総合スコア11

Python

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

0グッド

0クリップ

投稿2018/07/23 07:32

編集2018/07/23 07:53

cls_names

1total_images = 0 2for gov in govs: 3 4 file_list = os.listdir(base_path + gov + '/Annotations/') 5 6 for file in file_list: 7 8 total_images = total_images + 1 9 if file =='.DS_Store': 10 pass 11 else: 12 infile_xml = open(base_path + gov + '/Annotations/' +file) 13 tree = ElementTree.parse(infile_xml) 14 root = tree.getroot() 15 for obj in root.iter('object'): 16 cls_name = obj.find('name').text 17 cls_names.append(cls_name) 18print("total") 19print("# of images:" + str(total_images)) 20print("# of labels:" + str(len(cls_names))) 21コード 22```--------------------------------------------------------------------------- 23UnicodeDecodeError Traceback (most recent call last) 24<ipython-input-43-73bb8957341c> in <module>() 25 13 else: 26 14 infile_xml = open(base_path + gov + '/Annotations/' +file) 27---> 15 tree = ElementTree.parse(infile_xml) 28 16 root = tree.getroot() 29 17 for obj in root.iter('object'): 30 31/anaconda3/lib/python3.6/xml/etree/ElementTree.py in parse(source, parser) 32 1194 """ 33 1195 tree = ElementTree() 34-> 1196 tree.parse(source, parser) 35 1197 return tree 36 1198 37 38/anaconda3/lib/python3.6/xml/etree/ElementTree.py in parse(self, source, parser) 39 595 # It can be used to parse the whole source without feeding 40 596 # it with chunks. 41--> 597 self._root = parser._parse_whole(source) 42 598 return self._root 43 599 while True: 44 45/anaconda3/lib/python3.6/codecs.py in decode(self, input, final) 46 319 # decode input (taking the buffer into account) 47 320 data = self.buffer + input 48--> 321 (result, consumed) = self._buffer_decode(data, self.errors, final) 49 322 # keep undecoded input until the next call 50 323 self.buffer = data[consumed:] 51 52UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 45: invalid start byte 53コード 54### 前提・実現したいこと 55python初心者です。 56GitHubから引用し。指示通り、jupyternotebookで動かしているのですが 57エラーが出てしまい、進むことができません 58どこかコードが間違えていると思われるのですが、検討もつかず困っています。 59データセットから画像などを読み込んでいると思うのですが、'utf-8' と言うものが引っかかっており、エラーが出ていると思います。 コードの追加、削除するところがあれば教えて下さい。 60 61### 発生している問題・エラーメッセージ 62'utf-8'だと思われます 63### 該当のソースコード 64'utf-8' codec can't decode byte 0xb0 in position 45: invalid start byte 65 66 67 68 69ここに問題に対して試したことを記載してください。 70#!/usr/bin/env python 71# -*- coding: utf-8 -*- 72import sys 73import codecs 74 75sys.stdout = codecs.getwriter('utf_8')(sys.stdout) 76 77などを追加してみたのですがダメでした 78### 補足情報(FW/ツールのバージョンなど) 79 80ここにより詳細な情報を記載してください。 81参考にしているgithubです 82https://github.com/sekilab/RoadDamageDetector/blob/master/RoadDamageDatasetTutorial.ipynb

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

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

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

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

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

tachikoma

2018/07/23 07:42

スクリーンショットではなくソースコードをコピペするようにしてください。
tachikoma

2018/07/23 07:47

参考にしているリポジトリ情報も追加してください。
yokookentarou

2018/07/23 07:54

ソースコードと参考にしているgithubを追加させていただきました
guest

回答3

0

ベストアンサー

ファイルを開く際に文字コードを教えてやるとうまくいくかもしれません。

Python

1encoding = "utf-8" 2# encoding = "cp932" # utf-8がだめならこっちを試してみてください。 3f = open("filename.xml", encoding=encoding) 4root = ElementTree.parse(f)

文字コードのトラブル

もしくは、次のようにファイル名を与えてみてはどうでしょうか。

Python

1tree = ElementTree.parse("filename.xml")

投稿2018/07/23 07:51

編集2018/07/23 07:57
tachikoma

総合スコア3601

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

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

yokookentarou

2018/07/23 08:11

回答の方ありがとうございます。 どちらともやってみたのですが FileNotFoundError: [Errno 2] No such file or directory: 'filename.xml' と出てしまいました。
tachikoma

2018/07/23 08:12

そこの文字列は元のソースコードに置き換えてください。=> base_path + gov + '/Annotations/' +file
yokookentarou

2018/07/23 08:20

encoding = "utf-8" f = open("filename.xml", encoding=encoding) root = ElementTree.parse(f) cls_names = [] total_images = 0 for gov in govs: file_list = os.listdir(base_path + gov + '/Annotations/'+file) for file in file_list: total_images = total_images + 1 if file =='.DS_Store': pass else: infile_xml = open(base_path + gov + '/Annotations/' +file) tree = ElementTree.parse(infile_xml) root = tree.getroot() for obj in root.iter('object'): cls_name = obj.find('name').text cls_names.append(cls_name) print("total") print("# of images:" + str(total_images)) print("# of labels:" + str(len(cls_names))) このような形でよろしいでしょうか? 質問ばかりで申し訳ございません
tachikoma

2018/07/23 11:41

infile_xml = open(..., encoding=encoding)のほうです。
yokookentarou

2018/07/23 13:59

このように変えたところ、違うエラーが出てしまいましたが、 進むことができました。。 encoding = "utf-8" infile_xml= open(base_path + gov + '/Annotations/' +file) root = ElementTree.parse(f) cls_names = [] total_images = 0 for gov in govs: file_list = os.listdir(base_path + gov + '/Annotations/') for file in file_list: total_images = total_images + 1 if file =='.DS_Store': pass else: infile_xml = open(base_path + gov + '/Annotations/' +file) tree = ElementTree.parse(infile_xml) root = tree.getroot() for obj in root.iter('object'): cls_name = obj.find('name').text cls_names.append(cls_name) print("total") print("# of images:" + str(total_images)) print("# of labels:" + str(len(cls_names))) Traceback (most recent call last): File "/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2963, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-61-dc3c5881b451>", line 3, in <module> root = ElementTree.parse(f) File "/anaconda3/lib/python3.6/xml/etree/ElementTree.py", line 1196, in parse tree.parse(source, parser) File "/anaconda3/lib/python3.6/xml/etree/ElementTree.py", line 597, in parse self._root = parser._parse_whole(source) File "<string>", line unknown ParseError: no element found: line 1, column 0
tachikoma

2018/07/23 14:22

xml形式じゃないファイルをパースしようとしてますね。フォルダの中にはxml以外のファイルを入れないで試してみてください。
yokookentarou

2018/07/23 14:54

フォルダとはどこを指しているのでしょうか? "/anaconda3/lib/python3.6/xml/etree/ElementTree.py" のフォルダの中をみてみたのですがいまいちよくわかりませんでした・・・ 何度も申し訳ございません。
tachikoma

2018/07/25 04:47

file_list = os.listdir(base_path + gov + '/Annotations/')にあるlistdirの引数が示しているディレクトリのことです。
yokookentarou

2018/07/25 06:23

Annotationsのフォルダの中にXML以外のファイルが入っているために、エラー出てしまったと言うことだと思うのですが、 一通り、フォルダの中をみたのですが、全てXML形式でそれ以外のフォルダは見当たりませんでした。 私のパソコンがmac環境のため、エラーが出てきてしまっている可能性かもしれませんね・・・
tachikoma

2018/07/25 06:47

まずはファイル1個に対してパースできるかを確認してみないことには・・・ですね。難しいかもしれませんが、公式のElementTreeモジュールのドキュメントを参考にしてみてください。
guest

0

読み込もうとしているxmlファイルがutf-8以外の文字エンコーディングで保存されているのでは?

案1:対象のファイルをuft-8で保存しなおしてから再実行。

案2:「ElementTreeでダメなsjisファイルを読む方法 - ゲームエンジニアな日々」などを参考に、対象ファイルの文字エンコーディングで読み込むよう修正する。

投稿2018/07/23 07:50

編集2018/07/23 07:54
tkturbo

総合スコア5572

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

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

yokookentarou

2018/07/23 09:43

対象ファイルをuft-8で保存するにはどうすればよろしいのでしょうか?
tkturbo

2018/07/23 09:51

↑「utf-8 ファイル保存 方法」あたりでWeb検索すればいくらでも方法は出てきますよ。
guest

0

infile_xmlで指定されているファイルが正しいxmlファイルではないのではないでしょうか。ソースが示されていないので断定出来ないけど。

投稿2018/07/23 07:45

KojiDoi

総合スコア13676

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問