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

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

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

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

Q&A

解決済

1回答

1174閲覧

xmlファイル読込の方法

kiiti_shiraishi

総合スコア14

Python

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

0グッド

1クリップ

投稿2021/10/21 03:42

前提・実現したいこと

pythonでxmlfileを読み込みlistにしたいと思っています。
下記のソースコードで実行するとオープンファイルダイアログが表示され
xmlfileを指定した時点でエラーになってしまいます。
xmlfileをtreeに読み込むつもりでした。
ソースコードにはparsxmlだけ赤のアンダーラインが入っています。
xmlfileが取り込めればそのあとは勉強して継続したいと思っています。

エラー情報
PS C:\Users\shiraishikiichi> & C:/Users/shiraishikiichi/AppData/Local/Programs/Python/Python39/python.exe c:/Users/shiraishikiichi/pytext/xmlpars.py
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\shiraishikiichi\AppData\Local\Programs\Python\Python39\lib\tkinter_init_.py", line 1892, in call
return self.func(*args)
File "c:\Users\shiraishikiichi\pytext\xmlpars.py", line 15, in openFile
parsxml(fpath)
File "c:\Users\shiraishikiichi\pytext\xmlpars.py", line 7, in parsxml
tree = ET.parse()
TypeError: parse() missing 1 required positional argument: 'source'エラーメッセージ

### 該当のソースコード python import tkinter as tk import tkinter.filedialog as fd import xml.etree.ElementTree as ET def readxml(path): #xmlFileを読み込む tree = ET.reed() #そのイメージをラベルに表示する print(tree) def openFile(): fpath = fd.askopenfilename() if fpath: parsxml(fpath) root = tk.Tk() root.geometry("400x350") btn = tk.Button(text="ファイルを開く", command = openFile) imageLabel = tk.Label() btn.pack() imageLabel.pack() tk.mainloop() ### 試したこと どこが悪いのか全くわかっていません。 ### 補足情報(FW/ツールのバージョンなど) pythonのバージョンは3.9.4です。

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

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

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

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

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

ppaul

2021/10/21 03:53

エラーメッセージにあらわれる行 tree = ET.parse() が、質問に載せられているソースコード中にありません。 動かしていると思っているソースコードと実際に動いているソースコードが違うようですので、正しいソースコードに変更してください。
jbpb0

2021/10/21 04:07

「def openFile():」内で使われてる「parsxml()」って、何でしょうか? 質問のコードには「def readxml(path):」は有りますけど、「parsxml()」は有りません 質問のエラー見ると、「parsxml()」の中で「tree = ET.parse()」を実行してるところでエラー出てるので、本当に実行してるコードには有るはずです
jbpb0

2021/10/21 04:08

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
kiiti_shiraishi

2021/10/21 06:18

import tkinter as tk import tkinter.filedialog as fd import xml.etree.ElementTree as ET def readxml(path): #xmlFileを読み込む tree = ET.reed() #そのイメージをラベルに表示する print(tree) def openFile(): fpath = fd.askopenfilename() if fpath: parsxml(fpath) root = tk.Tk() root.geometry("400x350") btn = tk.Button(text="ファイルを開く", command = openFile) imageLabel = tk.Label() btn.pack() imageLabel.pack() tk.mainloop() 以下は上記コードで再実行時のエラーメッセージです Copyright (C) 2014 Microsoft Corporation. All rights reserved. PS C:\Users\shiraishikiichi> & C:/Users/shiraishikiichi/AppData/Local/Programs/Python/Python39/python.exe c:/Users/shiraishikiichi/pytext/xmlpars.py Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\shiraishikiichi\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__ return self.func(*args) File "c:\Users\shiraishikiichi\pytext\xmlpars.py", line 16, in openFile parsxml(fpath) NameError: name 'parsxml' is not defined
kiiti_shiraishi

2021/10/21 06:29

追)ソースコードをテキストエディタからコピペしたんですけどインデントが抜けてしまいます。
jbpb0

2021/10/21 06:33

ここに書くのではなくて、質問を編集してください その際に、私が「2021/10/21 13:08」のコメントに書いた通りにやってくれたら、インデントが抜けません
jbpb0

2021/10/21 06:38

> name 'parsxml' is not defined それはそうでしょうね 私が「2021/10/21 13:07」のコメントで指摘したように、コード中で「parsxml」が定義されてないのだから でも、質問に書かれてるエラーが出た時には、定義されてたはずなのですよ エラーに > ...xmlpars.py", line 7, in parsxml tree = ET.parse() って書かれてるのだから その時に実行したコードを載せてください、ってppaulさんも私も言ってるのですけど 何でそんな違うものをわざわざ載せるのでしょうか? もしかしたら、もともとのコードを削除してしまって、もう残ってないとか??
kiiti_shiraishi

2021/10/21 23:00

VBでは変数は全て定義してから使うことは処置していました。 pysthonでは定義しなくてもstr,int等使用できると認識していました。 定義するとは何故、どのようにして行うのでしょうか。 最初の質問ではソースコードが分断されていました。再度質問しようとおもいます。  初めての質問だったのでこのサイトの使い方が判らいまま投稿してました。
jbpb0

2021/10/21 23:15 編集

> ソースコードが分断されていました。 私が「2021/10/21 13:08」のコメントに書いた通りに修正したら、分断されません > 再度質問しようとおもいます。  質問は編集できます 同じ内容の質問を何回もするのはダメです https://teratail.com/help/avoid-asking の「過去に投稿した質問と同じ内容の質問」
jbpb0

2021/10/21 23:36 編集

> 定義するとは何故、どのようにして行うのでしょうか。 「parsxml」は、変数ではなく関数です 関数は、 def parsxml(fpath): tree = ET.parse(fpath) みたいにして定義します (「def…」の次の行からインデントが要ります) 定義してない関数を parsxml(fpath) と実行しようとして、そんなの無いよって言われてます > name 'parsxml' is not defined
kiiti_shiraishi

2021/10/23 09:28

parxmlは変数として使用していました。 なぜ関数になるのか判りません。
jbpb0

2021/10/23 09:37 編集

> parxmlは変数として使用 parsxml(fpath) のどこが変数? python 変数 でググったら、Pythonの入門レベルで変数の解説してるWebページがたくさん見つかるので、そういうところ見てください
kiiti_shiraishi

2021/10/23 12:41

了解しました。パイソン1年生のなかの例題を理解しないまま改造したためです。 もう一度やり直します。ありがとうございました。
guest

回答1

0

ベストアンサー

File "c:\Users\shiraishikiichi\pytext\xmlpars.py", line 7, in parsxml tree = ET.parse() TypeError: parse() missing 1 required positional argument: source

これは「parse()の引数sourceが足りないですよ」というエラーです。

xml.etree.ElementTreeモジュールのドキュメントによれば、ElementTree.parse()は以下のように使います。

xml.etree.ElementTree --- ElementTree XML API - Python 3.10.0b2 ドキュメント

python

1import xml.etree.ElementTree as ET 2tree = ET.parse('country_data.xml') 3root = tree.getroot()

ご質問のコードにparsxml()の定義がないためなんとも言えませんが、恐らくファイル名を渡していないために発生したエラーだと思われます。

なお、他の方も指摘されているように、ご質問の際はソースコードをコードブロックで囲って頂けると助かります。

詳しくは以下をご覧ください。

質問する際にMarkdownは必ず使って欲しい - Qiita

以上、お役に立てれば幸いです。

投稿2021/10/21 06:19

fj68

総合スコア752

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問