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

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

ただいまの
回答率

90.35%

  • Python

    9129questions

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

python jupyter notebookのエラーについて

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 496
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)))
コード

UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-43-73bb8957341c> in <module>()
13         else:
14             infile_xml = open(base_path + gov + '/Annotations/' +file)
---> 15             tree = ElementTree.parse(infile_xml)
16             root = tree.getroot()
17             for obj in root.iter('object'):

/anaconda3/lib/python3.6/xml/etree/ElementTree.py in parse(source, parser)
1194     """
1195     tree = ElementTree()
-> 1196     tree.parse(source, parser)
1197     return tree
1198 

/anaconda3/lib/python3.6/xml/etree/ElementTree.py in parse(self, source, parser)
595                     # It can be used to parse the whole source without feeding
596                     # it with chunks.
--> 597                     self._root = parser._parse_whole(source)
598                     return self._root
599             while True:

/anaconda3/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 0xb0 in position 45: invalid start byte
コード

 前提・実現したいこと

python初心者です。
GitHubから引用し。指示通り、jupyternotebookで動かしているのですが
エラーが出てしまい、進むことができません
どこかコードが間違えていると思われるのですが、検討もつかず困っています。
データセットから画像などを読み込んでいると思うのですが、'utf-8' と言うものが引っかかっており、エラーが出ていると思います。 コードの追加、削除するところがあれば教えて下さい。

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

'utf-8'だと思われます

 該当のソースコード

'utf-8' codec can't decode byte 0xb0 in position 45: invalid start byte

ここに問題に対して試したことを記載してください。

!/usr/bin/env python

 -*- coding: utf-8 -*-

import sys
import codecs

sys.stdout = codecs.getwriter('utf_8')(sys.stdout)

などを追加してみたのですがダメでした

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

ここにより詳細な情報を記載してください。
参考にしているgithubです
https://github.com/sekilab/RoadDamageDetector/blob/master/RoadDamageDatasetTutorial.ipynb

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tachikoma

    2018/07/23 16:42

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

    キャンセル

  • tachikoma

    2018/07/23 16:47

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

    キャンセル

  • yokookentarou

    2018/07/23 16:54

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

    キャンセル

回答 3

checkベストアンサー

0

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

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


文字コードのトラブル

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/23 17:11

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

    キャンセル

  • 2018/07/23 17:12

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

    キャンセル

  • 2018/07/23 17: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)))

    このような形でよろしいでしょうか?
    質問ばかりで申し訳ございません

    キャンセル

  • 2018/07/23 20:41

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

    キャンセル

  • 2018/07/23 22: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

    キャンセル

  • 2018/07/23 23:22

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

    キャンセル

  • 2018/07/23 23:54

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

    キャンセル

  • 2018/07/25 13:47

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

    キャンセル

  • 2018/07/25 15:23

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

    キャンセル

  • 2018/07/25 15:47

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

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/23 18:43

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

    キャンセル

  • 2018/07/23 18:51

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

    キャンセル

同じタグがついた質問を見る

  • Python

    9129questions

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