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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

1486閲覧

SVGファイルの不要データを除去したいのですが…

okabe-yuya

総合スコア23

Python 3.x

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2018/02/17 04:34

実現したいこと、全体フロー

プログラミングを初めて2週間ほどの初心者です。
自分なりにコードを書いてみましたが、上手くいきません。
内容は「SVGデータを読み込み、不要な開始タグとタグ内部の文字列、終了タグを除去」するというものです。

全体的なフローとしては
0. ファイルを選択して、ファイル名を取得する(def main():)
0. リストに記述されたタグ名で、取得ファイルから不要データを除去していく(def change():)
0. リスト内に既出でないタグがあれば処理を続行(データを除去)し、該当しない場合は新規ファイル名で保存

といった具合に動作すればと、思っております。

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

File "svg_changer.py", line 18
with open(new_name, "a")
^
SyntaxError: invalid syntax

構文エラー??
flake8 py__でチェックしましたが、該当する点はありませんでした。

該当のソースコード

python

1 2#coding utf-8 3 4import re, os 5import tkinter.filedialog as tkfd 6 7#不要なタグ名をリストに格納 8unnecessary_tags = ["title"] 9 10#引数にファイル名、不要なタグと中身を空白に変更し保存 11def change(image): 12 with open(image. "r", encoding="utf-8") as f: 13 for row in f: 14 for tag in unnecessary_tags: 15 if tag in unnecessary_tags: 16 delete_tag = re.sub(r"<{}>.*</{}>".format(tag), "", row) 17 else: 18 new_file_name = "new_" + image 19 with open(new_file_name, "a") 20 break 21 22#ファイルを選択し、ファイル名を取得する 23def main(): 24 target_file = tkfd.askopenfilename() 25 filename = os.path.dirname(target_file) 26 change(filename) 27 28if __name__="__main__": 29 main() 30

疑問点

現時点で、3点ほど疑問があります。

  • ファイルをtkfd.askopenfile()で開いた後に、with open()で再度開くのは正しいのか
  • タグ内の要素が既出かどうかを判定するif文は正しいのか
  • 正規表現に.format()を用いて変数を当てることができるのか

自身で、多くの文献を調べましたが、納得いく答えを見るけることができませんでした。
知識不足がお恥ずかしいですが、改善のヒントを教えていただきたいです。
また、不明な点、必要な追記情報などありましたら、お申し付けください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

シンタックスエラーについて、18行目の最後にコロンを追加、19行目のbreakにインデントを追加する必要があります。

投稿2018/02/17 04:51

編集2018/02/17 04:56
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

okabe-yuya

2018/02/17 06:17

ご指摘いただきましてありがとうございます。 dkato0077さんの言われるように構文を修正しました所、 ______________________________ File "svg_changer.py", line 11 with open(image. "r", encoding="utf-8") as f: ^ SyntaxError: invalid syntax ______________________________ 次はLine11に対して、エラーが発生してしまいました。 うーん。一体何がいけないのでしょうか。
退会済みユーザー

退会済みユーザー

2018/02/17 06:21

11行目のimageのあとの.を,に置き換えて見てください。
okabe-yuya

2018/02/17 06:49

初歩的なミスをしていました。 if__name__=="__main__"と共に修正しました。お恥ずかしい限りです。 現状、画像の読み込みのプログラムまで上手く動くようになりました。 しかし、また新たなエラーが…何度も申し訳ないです。 ______________________________ Traceback (most recent call last): File "svg_changer.py", line 28, in <module> main() File "svg_changer.py", line 25, in main change(filename) File "svg_changer.py", line 11, in change with open(image, "r", encoding="utf-8") as f: IsADirectoryError: [Errno 21] Is a directory: ______________________________ ディレクトリエラーというのは初めてみました。 調べてみると「組み込み例外」というものがヒットしましたが、 何のことなのかさっぱりです。
退会済みユーザー

退会済みユーザー

2018/02/17 07:09

11行目、openの引数にはファイル名の文字列をいれなければならないのですが、それがディクトリを指す文字列が与えられたためにエラーがでてますね。imagの中身をprintなどで確認してみてください。
okabe-yuya

2018/02/17 08:00

image_file = tkfd.askopenfilename() image_name = os.path.basename(image_file) print(image_name) ____________________ dirname()からbasename()に変更したプログラムを試験的に実行してみました。 内容は上記のものと同じで、選択したファイルからファイル名を取得するというものです。 こちらでは、ファイル名と拡張子を上手く取得することができました。 また、.pyのファイルと画像データを同じディレクトリ内に入れた所、 ファイルの読み込みに成功し、print()でSVGファイルのタグを表示させることができました。
okabe-yuya

2018/02/17 08:01

Traceback (most recent call last): File "svg_changer.py", line 29, in <module> main() File "svg_changer.py", line 26, in main change(filename) File "svg_changer.py", line 15, in change delete_tag = re.sub(r"<{}>.*</{}>".format(tag), "", row) IndexError: tuple index out of range 本当に何度も申し訳ないのですが、タプルインデックスというエラーが発生するようになってしまいました。
退会済みユーザー

退会済みユーザー

2018/02/17 08:14

formatの使い方がちょっと間違っています。delete_tag = re.sub(r"<{tag}>.*</{tag}>".format(tag=tag), "", row)
okabe-yuya

2018/02/18 12:32

返信が遅くなりまして、申し訳ありません。 .format()をご指摘のように改善した所、エラーが発生しなくなりました。 if文の分岐、自分の思った通りに機能していないようなので、一度、じっくり見直して見ようと思います。 ただ、、課題点であった ・基本的なファイルを読み込み ・正規表現部分 に関しては、きちんと機能するようになりました。 何度も、親切にアドバイスを頂きまして、有難うございました。 また、何かあれば知恵をお貸し頂きたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問