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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

ファイルI/O

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

Python

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

Q&A

解決済

1回答

892閲覧

with openでファイルをオープン

kiiti_shiraishi

総合スコア14

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

ファイルI/O

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

Python

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

0グッド

0クリップ

投稿2021/11/10 04:58

前提・実現したいこと

with openでxmlファイルをオープンしましたがファイルがどこに入っているのかわかりません。
xmlファイルをプリントしましたがファイルの内容が出力されません。
■■な機能を実装中に以下のエラーメッセージが発生しました。

出力内容

C:/Users/shiraishikiichi/pytext/SaveHandN.xml #print(xfpath)で出力した <Element 'HandData' at 0x0000006414156950>

該当のソースコード

def openFile(): xfpath = fd.askopenfilename() #xpethに読み込むxmlファイルがフルパスで入っている。 if xfpath: print(xfpath) with open(xfpath,'r') as f: #fにxmlファイルを取りこんだつもり root = ET.fromstring(f.read()) print(root) num = 0 exe = 0 board = [[e.tag, e.text] for e in root.findall('board/*')] if board[0] =='num': print(board[0]) print(board[1]) exe = 1

試したこと

print(root)としても出力内容は同じでした。

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

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

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

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

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

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

jbpb0

2021/11/10 05:32 編集

> ファイルがどこに入っているのかわかりません。 の「どこ」とは、「Python内のどこ(の変数)」という意味ですか?
kiiti_shiraishi

2021/11/10 05:37

with open(xfpath,'r') as f:でfに取り込んだと思っています。 print(f)でもprint(root)でも出力内容は同じ <Element 'HandData' at 0x0000006414156950>です。
jbpb0

2021/11/10 05:39

そういうことを聞いているのではなくて、質問の文章の意味を聞いてるのです > ファイルがどこに入っているのかわかりません。 の「どこ」とは、「Python内のどこ(の変数)」という意味ですか?
kiiti_shiraishi

2021/11/10 06:25

「with open(xfpath,'r') as f:でfに取り込んだと思っています。」で解答になっていないのでしょうか。 priny(f)としても出力内容は <Element 'HandData' at 0x0000006414156950>です。
guest

回答1

0

ベストアンサー

そのxpathってナカミ見たらどこにあるファイルかわかるんでは

投稿2021/11/10 05:01

y_waiwai

総合スコア87774

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

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

kiiti_shiraishi

2021/11/10 05:09

C:/Users/shiraishikiichi/pytext/SaveHandN.xmlがxpathに入っていてそれにより with open(xfpath,'r') as f:で読み込みました。 fというファイル名で取り込まれると説明されているんですが。 print(f)としても出力内容は同じです、
y_waiwai

2021/11/10 05:12

なにを知りたいんでしょうか。 > ファイルがどこに入っているのかわかりません。 C:/Users/shiraishikiichi/pytext/SaveHandN.xml ってファイルを読んでるんじゃないの?
kiiti_shiraishi

2021/11/10 05:26

xpsthにはxmlファイル名がフルパスではいっています。 print(f)としてもprint(root)としても出力内容は同じで <Element 'HandData' at 0x0000006414156950>という内容です。 ちなみに 'HandData'はxmlファイルのファイル名です。 自分はwith open(xfpath,'r') as f:でfに取り込まれていると思っています。
kiiti_shiraishi

2021/11/10 05:52

<Element 'HandData' at 0x0000006414156950>は全体をバイナリで出力したのではないでしょうか。 だとしたらユニコードで出力する方法があるのでしょうか。
y_waiwai

2021/11/10 06:08

root というのはおそらくクラスのインスタンスです そのため、そのままprintしてもそういう出力になります コードが一部分しか提示されてないので、言えるのはここまでですね
kiiti_shiraishi

2021/11/10 06:30

了解しました。 with open(xfpath,'r') as f:の後にprint(f)としても <Element 'HandData' at 0x0000006414156950>となりxmlファイルの内容が出力されません。
kiiti_shiraishi

2021/11/10 06:37

with open(xfpath,'r') as f: print(f) でfの内容でなくクラスのインスタンスが出力されるのでしょうか。
melian

2021/11/10 06:48

> kiiti_shiraishi with open(xfpath, 'r') as f: file_contents = f.read() とすれば file_contents にファイルの中身が入りますよ。root にはパースされたXMLテキスト(xfpath ファイルの中身)が ElementTree クラスのインスタンスとして格納されています。
kiiti_shiraishi

2021/11/10 06:56

with open(xfpath, 'r') as f: file_contents = f.read() print(file_contents)でも print(f)でも出力内容は <_io.TextIOWrapper name='C:/Users/shiraishikiichi/pytext/SaveHandN.xml' mode='r' encoding='cp932'>となります。
y_waiwai

2021/11/10 07:03

そういう内容なんでしょう。 メモ帳でそのファイルを開いてみては
melian

2021/11/10 07:05

なるほど、xfpath がパス名(文字列)ではなくインスタンスになっていますね。それなら file_contents = xfpath.read() になりますが、すでに close されている場合はエラーになります。その場合は with open(xfpath.name, 'r') as f: file_contents = f.read() として再度読み込むしかないでしょう。というより、もっと前の段階で読み込む方が良いと思いますが。
kiiti_shiraishi

2021/11/10 07:23

with open(xfpath, encoding='utf-8') as fin:content = fin.read()で取り込むことができました。 ありがとうございました。私の参考書にはwith openという書式があることは書いてありますが、書式の説明ははとんどなしです。今後も皆様に教えて頂かないと先に進めそうにありません。今後もよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問